【问题标题】:Why is vba always returning No Error when input given is wrong?为什么给定输入错误时vba总是返回No Error?
【发布时间】:2016-11-29 13:44:13
【问题描述】:

我正在编写一个小宏,它将遍历工作表中的所有单元格并测试特定正则表达式的列。我写了一个简单的正则表达式来比较输入是否是字符串;如果是,那么它应该忽略它,否则它应该将单元格格式化为红色。预期的输出是内容错误的单元格应该被着色。但是,VBA 会处理每个内容并将每个不正确的条目作为正确的传递。

这是我的代码:

 Dim RegEx As Object
 Set RegEx = CreateObject("VBScript.RegExp")

       With RegEx
                .Pattern = "/^[A-Za-z]+$/"
                .Global = True
                .IgnoreCase = True

                If .Test(cell_value) Then
                    Cells.Item(num_rows, num_cols).Interior.ColorIndex = RGB(255, 0, 0)

                    MsgBox "Error" + cell_value
                Else
                    MsgBox "No error" + cell_value
                End If
            End With

即使输入不正确,它也总是返回“无错误”。有什么提示吗?

【问题讨论】:

  • 首先,我不认为 VBScript RegExp 语法使用 / 字符来分隔正则表达式模式。其次,在您的代码中,如果找到该模式,则 test 将为 true 并返回 Error,这似乎与您解释想要的相反。
  • @VincentG 是的,你是对的。 VB RegExp 不使用 / 字符来分隔正则表达式,是的,你得到了它。

标签: vba excel


【解决方案1】:

您知道,在您的示例中,每个单元格调音模式都会被标记为错误,对吧?更具体地说,如果在您的示例中.Pattern = "A",每个带有字母Aa(感谢IgnoreCase = True)的单元格都将被标记为错误,而不是休息。

如果这是您的意图,那么您的模式一定有问题。您发布的脚本对我来说很好。

【讨论】:

  • 我使用的模式在某些方面是不正确的。从@VincentG 的评论中获取了一些参考但是,它在格式化单元格时给了我一些错误。我会解决的。谢谢
【解决方案2】:

您可以使用条件格式(即无需代码)来做到这一点

例如,此条件格式仅在字符串包含 A-Z 时才返回 TRUE

A 是 65
B 为 90

所以通过比较这些测试的总和与字符串的长度来测试每个字符是否具有 64 和 90 之间的值。

=SUMPRODUCT(--((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64)), --(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91))=LEN(A1)

我在 2004 年为另一个问题写了这篇文章,像 Barry Houdini 这样的人使用 Xl2013 和 xl2016 中的新功能可能会有更好的解决方案。

【讨论】:

  • 恕我直言,这是一个很好的建议。但是,我现在已经完成了我的代码。无论如何感谢您的谦虚建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多