我在 vba 中编写了一个代码,如果我在单元格中输入一个字符串,B8
那么它将匹配范围为 的其他工作表A6:A500
。我发现的文本是Carlos Leather Fashion*Lefties*Alex*Mid Blue
。并且有一个字符串A6
是Carlos Leather Fashions*Lefties*Alex*Mid Blue
。因此,它不匹配,因为时尚缩写中有一个额外的“s”。但我的 vba 代码在这种情况下也显示已找到。这是我的代码 -
Dim helper As String
helper = Cells(8, 2).Value
Dim paymentStatusSheet As Worksheet
Set paymentStatusSheet = Worksheets("Payment-Summary")
'--------------------------------------------------------------Set the Payment status worksheet
If paymentStatusSheet.Range("A6:A500").Find(What:=helper, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
MsgBox "Not Found"
Else
MsgBox "Found"
End If
请帮忙!
答案1
问题出现的原因在于Range.Find()
将星号视为通配符,它匹配任何字符。因此*
搜索字符串匹配Fashion*
Fashions*
一种快速解决方案是转义搜索模式。Excel 将~*
搜索字符串视为单个星号字符。因此,针对您的特定用例的快速修复方法是:
Dim helper As String
helper = Cells(8, 2).Value
helper = Replace(helper, "*", "~*") '<-- Note this new line
Dim paymentStatusSheet As Worksheet
Set paymentStatusSheet = Worksheets("Payment-Summary")
'--------------------------------------------------------------Set the Payment status worksheet
If paymentStatusSheet.Range("A6:A500").Find(What:=helper, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
MsgBox "Not Found"
Else
MsgBox "Found"
End If
这里,我没有考虑其他通配符,例如?
和~
。如果您在搜索字符串中预见到它们,则可能需要对其进行转义。