【问题标题】:Excel VBA: Select Case if ActiveCell like "*string*"Excel VBA:如果 ActiveCell 像“*string*”,则选择大小写
【发布时间】:2013-08-26 21:27:20
【问题描述】:

我正在开发一个宏,它采用ActiveCell 的当前值并根据选择情况更改该值。

但是,我无法确定 ActiveCell 是否包含通配符字符串。我不确定我的语法是否正确。如何让我的选择案例进行比较?

Select Case ActiveCell.Value

    Case ActiveCell.Value Like "*string*"
        ActiveCell.Value = "contains string"

End Select

【问题讨论】:

  • 我认为您不会在 Select Case 块中使用像这样的通配符语句测试。尝试改用If... then... elseif...end if
  • Case Is Like替换Case ActiveCell.Value Like
  • 这个问题有一个有效的答案。你应该公平并接受它。对你的其他问题也这样做。

标签: excel vba wildcard select-case vb-like-operator


【解决方案1】:

可以使用通配符。请记住这两点:首先,字符串比较表达式计算为布尔数据类型(真/假);其次,根据 Select...Case 语句的开发人员参考,任何 Case 表达式 必须“隐式转换”为与 Select Case test 表达式相同的数据类型。为了演示,让我们使用上面原始帖子中的代码。

Select Case ActiveCell.Value  '-->ActiveCell.Value is the test expression

    Case ActiveCell.Value Like "*string*"  '-->(ActiveCell.Value Like "*string*") is the Case expression.
        ActiveCell.Value = "contains string"

End Select

如果我们在任何工作表中选择一个包含字符串值的单元格,然后使用立即窗口使用 TypeName() 函数测试这两个表达式的数据类型,我们将得到以下结果:

?TypeName(ActiveCell.Value)
 String
?TypeName(ActiveCell.Value Like "*string*")
 Boolean

如您所见,Select...Case 在这里不起作用,因为数据类型并不隐式相同(如果宏在包含单- “True”或“False”的单词值,Excel 会自动将其转换为布尔值)。

解决方案实际上是一个非常简单的解决方案。只需将测试表达式更改为 True

Select Case True

    Case (ActiveCell.Value Like "*string*")
        ActiveCell.Value = "contains string"

End Select

这和写法本质上是一样的:

If (ActiveCell.Value Like "*string*") = True Then ActiveCell.Value = "contains string"

使用 If...Then 还是 Select...Case 主要取决于个人喜好。由于代码的可读性,我个人喜欢 Select...Case 构造,但也有其他好处(例如能够将每个 Case 传递以逗号分隔的表达式列表而不是使用 OR 运算符,使代码更简洁)。

【讨论】:

  • 这很好解释。我重新审视了我不久前做的一些代码,忘记了它做了什么,这让我记忆犹新
  • 优秀的答案。我认为这是不可能的,就这么简单。谢谢 Nero057
【解决方案2】:

Is 和 like 不能用作 VBA 中的 select case 语句中的比较运算符。
如果可能的话,最好用 if-then 语句代替:

If ActiveCell.Value Like "*string*" Then ActiveCell.Value = "string"

来自比较运算符的 VBA 词汇表:

表示两个或多个之间关系的字符或符号 值或表达式。这些运算符包括小于 ()、大于或等于 (>=)、不等于 () 和等于 (=)。其他比较运算符 包括是和喜欢。注意 Is 和 Like 不能用作比较 Select Case 语句中的运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多