我有以下代码:
Columns("F:F").Select
For Each cell In Selection
Select Case cell
Case InStr(1, cell, ",") <> 0
MsgBox ("found")
Case IsEmpty(cell) Or Null
MsgBox ("empty")
Case Else
Stop
End Select
Next
在 F:F 列中,我按以下顺序排列:
"Marc Jacobs", "", "Renolds, Bob"
InStr 没有找到任何合适的 case 语句。这里发生了什么?
最佳答案
您使用 Select Case 语法的方式似乎是问题所在。您的每个案例都包含一个计算。因此,VB 将在进行“选择案例”比较之前对每个案例进行计算。
例如:对于您的第一个循环,cell="Renolds, Bob"。因此,您的第一个 Case 条件会将 InStr(1,cell,",") 评估为 8,并将 (8<>0) 评估为 True。但是,“Renolds, Bob”不等于 (InStr(1,cell,",") <> 0) ',它等于 True。奇怪的是,当 VBA 将 ""转换为 bool 值以便可以比较它们时,""转换为 True。
你可能想写的是
For Each cell in Selection
If InStr(1, cell, ",") <> 0 Then
MsgBox("found")
ElseIf IsEmpty(cell)
MsgBox("empty")
Else
Stop
End If
Next
关于string - InStr 找不到子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113845/