string - InStr 找不到子字符串

标签 string excel vba contains select-case

我有以下代码:

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 语句。
  • 对于“Marc Jacobs”,我接到 Case Else 电话(正确电话)
  • 对于“”,我得到了找到的消息(应该是空消息)
  • 对于“Renolds,Bob”,我收到 Case Else 电话(应该收到找到的消息)

  • 这里发生了什么?

    最佳答案

    您使用 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/

    相关文章:

    使用 atoi/sprintf 将整数转换为字符串

    c - C 中 strstr() 中 for 循环的错误使用

    excel - 如何保存工作簿并处理 TITUS(或任何其他文档分类插件)弹出窗口?

    excel - 我想通过 VBA 在我的工作表中创建一系列协方差矩阵

    regex - Excel 正则表达式宏将在一列中搜索匹配项,并将所有匹配项的整行粘贴到另一个工作表中

    javascript - VBA/次要 HTML/Javascript : Click a tricky hidden checkbox in a report

    excel - 如何使用 VBA 获取当前年份

    java - 解析字符串并创建 json 格式,然后保存到文本文件

    python - 如果用户输入中有 str ('a' ) 或 str ('b' ) 或 str ('c' ) 然后做一些事情

    vba - 如何从字符串中获取单元格?