我正在使用这个宏来识别包含非字母数字字符的单元格:
Function RegExCheck(objCell As Range, strPattern As String)
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = strPattern
If RegEx.Replace(objCell.Value, "") = objCell.Value Then
RegExCheck = 0
Else
RegExCheck = 1
End If
End Function
在此示例中,我可以在单元格本身中指定要查找的字符:
=RegExCheck(A1,"[^A-Za-z0-9_-]")
由于我在每个单元格中搜索的字符是相同的,有没有办法可以将其添加"[^A-Za-z0-9_-]"
到宏模块中并简单地用来=RegExCheck(A1)
输出结果?
答案1
当然,只需strPattern
在函数内部设置即可:
Function RegExCheck(objCell As Range)
Dim strPattern As String
strPattern = "[^A-Za-z0-9_-]"
... [rest of code] ...
End Function
或者你可以完全跳过使用另一个变量并执行以下操作:
Function RegExCheck(objCell as Range)
...
RegEx.Pattern = "[^A-Za-z0-9_-]"
...
End Function
但我建议保留变量,就像我的第一个示例一样。这样可以更轻松地在函数内重用该模式,并且是一个逻辑检查位置……而不必阅读代码行来寻找模式。(这更适用于较长的函数/子程序,但在我看来这是最佳做法)。
编辑:您实际上并没有问,但仅供参考,您也可以将模式存储在单元格中(例如B1
)并引用该单元格以获取模式。如果需要,这将使您能够相对快速地更改模式:
Function RegExCheck(objCell as Range, patternCell as Range)
...
RegEx.Pattern = patternCell.Value
....
End Function
但是当你调用这个函数时,一定要锚定patternCell
引用,即=REGEXCHECK(A1,$B$1)
编辑:明确地说,这应该有效:
Function RegExCheck(objCell As Range)
Dim strPattern As String
strPattern = "[^A-Za-z0-9_-]"
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = strPattern
If RegEx.Replace(objCell.Value, "") = objCell.Value Then
RegExCheck = 0
Else
RegExCheck = 1
End If
End Function