是InStr或我的通配符造成问题?
我不知道为什么这是行不通的。 它是一个更大的子程序的一部分,但我已经把问题缩小到这个使用InStr函数的通配符。
我试图尽可能多地在InStr和通配符上find尽可能多的信息,并且据我所知,这应该可行。 但事实并非如此。
Dim String1 As String Dim String2 As String Dim TestString As String Dim Location As Integer String1 = "Hello" String2 = "Goodbye" TestString = "Hello and Goodbye" Location = InStr(1, TestString, (String1 & "*" & String2), vbTextCompare) If Location >= 1 then 'Do Something End If
好的,我根据人们的build议尝试了一些东西,现在我正处在这个阶段。
Dim SourceString As String Dim TestString As String Dim TempArray() As String SourceString = "Hello and Goodbye" TestString = "hello * goodbye" TempArray = Split(TestString, "*") If SourceString Like _ Chr(42) & TempArray(0) & Chr(42) & TempArray(1) & Chr(42) Then Found = True End If
我已经完成TempArray的每个部分的debug.print,它包含空格,所以我知道它是正确的分裂。
我现在想念什么? 🙁
InStr函数不使用模式匹配,因此您的通配符星号被视为文字星号字符(例如Chr(42)
)。
也许切换到Like模式匹配会做出更好的布尔评估。
'method 1 If TestString Like Chr(42) & String1 & Chr(42) And _ TestString Like Chr(42) & String2 & Chr(42) Then 'Do Something End If 'method 2 If TestString Like Chr(42) & String1 & Chr(42) & String2 & Chr(42) Then 'Do Something End If
或者,使用InStr函数的进展来确保String1和String2的正确匹配顺序。
'method 1 If CBool(InStr(1, TestString, String1, vbTextCompare)) And _ InStr(1, TestString, String2, vbTextCompare) > InStr(1, TestString, String1, vbTextCompare) Then 'Do Something End If 'method 2 dim p as long If CBool(InStr(1, TestString, String1, vbTextCompare)) Then p = InStr(1, TestString, String1, vbTextCompare) + Len(String1) If CBool(InStr(p, TestString, String2, vbTextCompare)) Then 'Do Something End If End If
InStr(1, TestString, (String1 & "*" & String2), vbTextCompare)
的隐含逻辑是:
TestString
包含String1
后跟0个或更多个字符,后跟String1
由于Instr
不支持通配符,因此将testing分解为组件
Sub Demo() Dim String1 As String Dim String2 As String Dim TestString As String Dim Location As Integer Dim i As Long, j As Long String1 = "Hello" String2 = "Goodbye" TestString = "Hello and Goodbye" i = InStr(1, TestString, String1, vbTextCompare) If i > 0 Then j = InStr(i + Len(String1), TestString, String2, vbTextCompare) If j > 0 Then 'Do Something End If End If End Sub
i
给出了String1
的位置,如果这些是您的Do Something代码所需要的,那么j
给出了String1
的位置
请注意,如果String1
是String
的子串,或者如果String1
出现在String1
之前和之后,则此处的其他答案可能会给出错误结果