gpt4 book ai didi

vba - InStr 或我的通配符会导致问题吗?

转载 作者:行者123 更新时间:2023-12-04 19:56:17 24 4
gpt4 key购买 nike

我不知道为什么这行不通。它是一个更大的子例程的一部分,但我已将问题缩小到在 InStr 函数中使用通配符。

我已尝试尽可能多地查找有关 InStr 和通配符的信息,并且据我所知,这应该有效。但事实并非如此。

    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

好的,我已经根据人们的建议尝试了一些事情,现在我正处于这一点......

    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 function不使用模式匹配,因此您的通配符星号被视为文字星号字符(例如 Chr(42))。

也许切换到Like 模式匹配会产生更好的 bool 值评估。

'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

关于vba - InStr 或我的通配符会导致问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com