我不知道为什么这不起作用。它是一个更大的子程序的一部分,但我已经将问题缩小到使用带有InStr函数的通配符。
我试图在InStr和通配符上找到尽可能多的信息,据我所知,应该工作。但事实并非如此。
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
好的,我根据人们的建议尝试了一些东西,现在我就是这样......
isEmpty
我已经完成了TempArray每个部分的debug.print,它包含了空格,所以我知道它正在分裂。
我现在缺少什么? :(
答案 0 :(得分:2)
InStr function不使用模式匹配,因此您的通配符星号被视为文字星号(例如Chr(42)
)。
也许切换到喜欢模式匹配会做出更好的布尔评估。
'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
答案 1 :(得分:1)
InStr(1, TestString, (String1 & "*" & String2), vbTextCompare)
的隐含逻辑是:
TestString
包含String1
后跟0个或多个字符,后跟String2
由于Instr
不支持通配符,因此将测试分解为组件
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
的位置,j
给出String2
的位置,如果这些是您的Do Something代码需要的话
请注意,如果String2
是String
的子字符串,或String2
String1
出现var metFital = { "IMP_TRAV_SP": { type: "cont", Est: 0.055 },....}
var IMP_TRAV_SP= 20;
var EvalueFital=0
for (var par in metFital) {
if (metFital[par].type == "cont") {
EvalueFital = EvalueFital + ((metFital[par].Est) *par);
}
};
,则此处的其他答案可能会产生错误结果