VBA遍历数组查找目标值无返回也无报错问题求助
VBA表头查找代码问题修正
核心问题梳理
- 完全缺失实际查找逻辑:原代码没有调用
Range.Find方法执行单元格内容匹配,循环内直接对字符串类型的待查找值做WhatToFind(iCtr) < 1的数值比较,该判断条件永远不成立,所以既不会统计缺失项也不会触发报错 - 数组引用错误:拼接缺失项时直接写数组名
WhatToFind,没有按下标取对应单个查找元素 - 消息框语法错误:最终
MsgBox行写成了布尔判断逻辑,执行后只会返回True/False,不会输出缺失项内容 - 变量未初始化:
ListOfMissing没有提前设为空字符串,首次拼接时会出现空值异常 - 潜在工作表命名错误:如果你的工作表实际叫
Sheet1,代码里的Sheets1多了个s,会直接触发运行时错误
修正后代码
Sub CheckColumns() Dim rngToSearch As Range Dim WhatToFind As Variant, ListOfMissing As String Dim iCtr As Long, findRes As Range ' 注意确认工作表名称是否和实际一致 Set rngToSearch = ThisWorkbook.Worksheets("Sheet1").Range("A2:ZZ2") WhatToFind = Array("Test","Test1","Test2", "Dummy", "Dummy1", "Dummy2") ListOfMissing = "" ' 初始化缺失列表 For iCtr = LBound(WhatToFind) To UBound(WhatToFind) ' 执行查找,默认匹配单元格完整内容 Set findRes = rngToSearch.Find(What:=WhatToFind(iCtr), LookIn:=xlValues, LookAt:=xlWhole) ' 查找不到则加入缺失列表 If findRes Is Nothing Then If ListOfMissing <> "" Then ListOfMissing = ListOfMissing & ";" ListOfMissing = ListOfMissing & WhatToFind(iCtr) End If Next ' 输出结果 If ListOfMissing = "" Then MsgBox "所有预设表头均已找到" Else MsgBox "未找到的表头:" & ListOfMissing End If End Sub
补充说明
如果需要模糊匹配单元格内容,把代码里的LookAt:=xlWhole改为LookAt:=xlPart即可。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

