Excel VBA多工作表数据匹配代码运行无输出问题求助
问题分析与代码修正
原代码存在的问题
- 拼写错误:
xlTUp应为xlUp,导致无法正确获取目标工作表的最后一行数据 - 未限定工作表的单元格引用:
Cells(j, 2)默认指向当前活动工作表,而非遍历中的目标工作表,无法正确匹配数据 - 语法不完整:
If Cells(j, 2).Value = FindVal Then语句缺少对应的End If,逻辑无法正常闭合 - 匹配结果覆盖:
lc仅在遍历工作表前获取一次,同一ID在多个工作表匹配时会覆盖同一单元格内容
修正后的代码
Private Sub Command_MapComp_Click() Dim BP As Worksheet Set BP = Sheets("Blue Print") Dim CF As Worksheet Set CF = Sheets("Competency Framework") Dim lr As Long Dim lc As Long Dim i As Long Dim j As Long Dim FindVal As String Dim ws As Worksheet ' 显式声明工作表变量 ' 遍历「Blue Print」第6列13至29行的ID For i = 13 To 29 FindVal = BP.Cells(i, 6).Value ' 跳过空ID,避免无效遍历 If FindVal = "" Then GoTo NextRow ' 遍历排除指定工作表外的所有工作表 For Each ws In ThisWorkbook.Worksheets If ws.Name <> BP.Name And ws.Name <> CF.Name Then ' 获取当前工作表第1列的最后一行,确定遍历范围 lr = ws.Cells(Rows.Count, 1).End(xlUp).Row ' 遍历当前工作表第2列8行至最后一行 For j = 8 To lr If ws.Cells(j, 2).Value = FindVal Then ' 每次匹配成功时,重新获取当前行的首个空单元格 lc = BP.Cells(i, Columns.Count).End(xlToLeft).Column + 1 ' 写入匹配到的工作表名称 BP.Cells(i, lc).Value = ws.Name End If Next j End If Next ws NextRow: Next i End Sub
修正说明
- 显式声明
ws变量,避免隐式变量引发的未知问题 - 增加空ID判断,跳过无意义的遍历操作
- 每次匹配成功后重新获取当前行的首个空列位置,确保多个匹配结果依次写入不同单元格,避免覆盖
- 修正所有语法错误,确保逻辑完整且可正确执行
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

