首页 > 解决方案 > 有通配符问题

问题描述

我在我的 VBA 代码中使用通配符时遇到了困难。

Set OpenWB = Workbooks.Open("C:filename.csv", ReadOnly:=True)

With OpenWB.Worksheets(1)
    iTotSRows = .Range("F" & .Rows.Count).End(xlUp).Row
    oSourceR = .Range("A2:G" & iTotSRows)
End With
OpenWB.Close False

Set CompWB = Workbooks.Open("C:filename2.csv", ReadOnly:=True)

With CompWB.Worksheets(1)
    iTotCRows = .Range("A" & .Rows.Count).End(xlUp).Row
    oCurR = .Range("A2:f" & iTotCRows)
End With
CompWB.Close False

For iSC = 1 To UBound(oSourceR) 
    For iCC = 1 To UBound(oCurR)
        If (LCase(oCurR(iCC, 2)) = LCase(oSourceR(iSC, 2))) And (LCase(oCurR(iCC, 3)) = LCase(oSourceR(iSC, 3))) And (LCase(oCurR(iCC, 4)) = LCase(oSourceR(iSC, 4))) And (LCase(oCurR(iCC, 5)) = "*" & LCase(oSourceR(iSC, 5))) Then
            oSourceR(iSC, 7) = oCurR(iCC, 6)
            Exit For
        End If
    Next
Next

ThsSht.Range("A2:G" & iTotSRows) = oSourceR

如您所见,当我比较值时,我想使用通配符来比较 (oSourceR(iSC, 5)) 和 (oCurR(iCC, 5)),因为其中一个是包含在末尾的参考号在另一个字符串。

为什么这不起作用?如果不是通配符,其余代码可以正常工作。

标签: excelvba

解决方案


您需要使用Like运算符。

If (LCase(oCurR(iCC, 2)) = LCase(oSourceR(iSC, 2))) And _
   (LCase(oCurR(iCC, 3)) = LCase(oSourceR(iSC, 3))) And _
   (LCase(oCurR(iCC, 4)) = LCase(oSourceR(iSC, 4))) And _
   (LCase(oCurR(iCC, 5)) Like "*" & LCase(oSourceR(iSC, 5))) Then
        oSourceR(iSC, 7) = oCurR(iCC, 6)
        Exit For
End If

推荐阅读