是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的位置

请注意,如果String1String的子串,或者如果String1出现在String1之前和之后,则此处的其他答案可能会给出错误结果