You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA Scripting.Dictionary匹配粘贴异常:未处理首行数据问题

问题分析与解决方案

嘿,我一眼就揪出问题所在了——你的代码直接跳过了检查器表前17行的WO#数据,这就是已清理条目没被复制的核心原因,咱们来一步步拆解:

问题根源

  • 循环起始行设置错误:你写的For j = 18 To lastRow1(读取检查器表)和For i = 18 To lastRow2(更新主表),意味着程序从第18行才开始处理数据。如果检查器表中已清理的WO#在18行之前,自然会被完全忽略,根本不会被存入字典,主表对应行也就得不到更新。
  • 潜在的重复键报错风险:原代码里如果检查器表存在重复的WO#,执行AVals.Add时会直接抛出错误——因为字典的键必须是唯一的。

修正后的代码

Sub dates()
    Application.ScreenUpdating = False
    Dim AVals As Object: Set AVals = CreateObject("scripting.dictionary")
    Dim i As Long, j As Long, lastRow1 As Long, lastRow2 As Long
    Dim sh_insp As Worksheet, sh_2018 As Worksheet ' 修正:补全变量类型声明
    Dim MyName As String
    
    Set sh_insp = ActiveSheet
    Set sh_2018 = Sheets("2018")
    
    With sh_insp
        ' 优化:更可靠的获取最后一行方式
        lastRow1 = .Cells(.Rows.Count, "G").End(xlUp).Row
        ' 修正:改成你表格实际的数据起始行(比如表头在第1行,就写2;无表头就写1)
        For j = 2 To lastRow1
            MyName = .Cells(j, "G").Value
            ' 补充:避免重复键报错,同时确保数据有效
            If Len(MyName) > 0 And Len(.Cells(j, "R").Value) > 0 And Not AVals.Exists(MyName) Then
                AVals.Add MyName, .Cells(j, "R").Value
            End If
        Next j
    End With
    
    With sh_2018
        lastRow2 = .Cells(.Rows.Count, "G").End(xlUp).Row
        ' 同样修正为主表数据的实际起始行
        For i = 2 To lastRow2
            MyName = .Cells(i, "G").Value
            If AVals.Exists(MyName) Then
                .Cells(i, "R").Value = AVals(MyName) ' 简化写法:Item关键字可省略
            End If
        Next i
    End With
    
    Application.ScreenUpdating = True
End Sub

关键修正说明

  1. 调整循环起始行:把j = 18和i = 18改成你表格中实际数据开始的行号(比如第1行是表头,数据从第2行开始就写2),这样前几行的WO#就能被正常读取和匹配了。
  2. 优化最后一行获取逻辑:用.Cells(.Rows.Count, "G").End(xlUp).Row替代原来绕弯的写法,更简洁也更不容易出错。
  3. 避免重复键错误:添加Not AVals.Exists(MyName)判断,防止检查器表出现重复WO#时程序崩溃。
  4. 规范变量声明:补全sh_insp的类型声明为As Worksheet,避免默认的Variant类型带来的潜在问题。

内容的提问来源于stack exchange,提问作者R.E.L.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:02:16