Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:检查表中的值是否存在于不同的范围[如错误检查函数],并查找不匹配项_Excel_Vba - Fatal编程技术网

Excel VBA:检查表中的值是否存在于不同的范围[如错误检查函数],并查找不匹配项

Excel VBA:检查表中的值是否存在于不同的范围[如错误检查函数],并查找不匹配项,excel,vba,Excel,Vba,我试图编写一个函数和一个过程,调用这样一个函数来检查位于重复数据大表中的项的名称是否出现在不同的工作表上,基本上类似于用户的输入工作表或设置工作表。基本上,代码应该捕获表2中的拼写错误和不匹配项,而不是表1中的范围。理想情况下,我希望添加一个功能,让代码停止在不匹配的项目上,并可能突出显示它,以便用户可以更正错误或进一步研究问题。目前,我试图编写代码的第一部分,但有些东西不起作用。无论我如何在表中设置数据,它总是说项名称不存在: Option Explicit Public Function

我试图编写一个函数和一个过程,调用这样一个函数来检查位于重复数据大表中的项的名称是否出现在不同的工作表上,基本上类似于用户的输入工作表或设置工作表。基本上,代码应该捕获表2中的拼写错误和不匹配项,而不是表1中的范围。理想情况下,我希望添加一个功能,让代码停止在不匹配的项目上,并可能突出显示它,以便用户可以更正错误或进一步研究问题。目前,我试图编写代码的第一部分,但有些东西不起作用。无论我如何在表中设置数据,它总是说项名称不存在:

Option Explicit

Public Function ItemNameExists(Target As String) As Boolean

Dim lookUp As Excel.Range
Dim itemCell As Excel.Range

ItemNameExists = False

Set lookUp = Worksheets("Sheet2").Range("Table1[Items]")
For Each itemCell In lookUp
    If (itemCell.Value = Target) Then
        ItemNameExists = True
        Exit Function
    End If
Next

End Function

Sub CheckErrors()

Dim ItemName As Excel.Range
Dim Cell As Range

Set ItemName = Worksheets("Sheet1").Range("B3:B12")

For Each Cell In ItemName
    If (Len(Cell.Value) > 0) Then
        If (Not ItemNameExists(Cell.Value)) Then
        MsgBox ("Item name doesn't exist on Sheet1")
        Exit Sub
        End If
    End If
Next

End Sub

要搜索
范围
,有一种特定的方法,
范围。查找
(官方文档)。 如果未找到匹配项,则返回
Nothing

对于您的情况,有相当多的地方可能会错过目标,因此您可能需要调试:

  • 确保
    lookUp
    实际引用了预期的
    范围
  • 确保
    Target
    包含所需的文本
  • 尝试使用
    itemCell.Text
    而不是
    itemCell.Value
    (如果您仍然不想使用
    Range.Find