我正在编写一个小宏,它将遍历工作表中的所有单元格并测试特定正则表达式的列。我写了一个简单的正则表达式来比较输入是否为字符串;如果是,那么它应该忽略它,否则它应该将单元格格式化为红色。预期的输出是内容错误的单元格应该着色。但是,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
即使输入错误,也始终返回“无错误”。任何提示?
答案 0 :(得分:1)
你知道,在你的例子中,每个单元格的cantoning模式都会被标记为错误,对吧?更具体地说,如果在您的示例中.Pattern = "A"
,则每个包含字母A
或a
(感谢IgnoreCase = True
)的单元格都会被标记为错误,而不是。
如果这是您的意图,那么您的模式必定存在问题。您发布的脚本对我来说很好。
答案 1 :(得分:1)
您可以使用条件格式(即没有代码)来执行此操作
例如,只有当字符串包含A-Z时,此条件格式才会返回 TRUE
A是65
B是90
所以测试是每个角色的值是否在64&之间。通过比较这些测试的总和与字符串的长度来进行比较。
=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中的新功能可能有更好的解决方案。