我可以直接将参数编码到这个宏中吗?还是必须在每个单元格中添加它们?

我可以直接将参数编码到这个宏中吗?还是必须在每个单元格中添加它们?

我正在使用这个宏来识别包含非字母数字字符的单元格:

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

相关内容