特殊字符的VBA RegExp

当用户为我的macros输出input“另存为”名称时,我想检查在保存文件时会导致错误的特殊字符 – [\/:*?<>|]

我正在使用RegExp:

 Dim regEx As New RegExp Dim strSpecChar As String: strSpecChar = "*[\/:*?<>|]*" 'Compile Error here Dim OutputFileName As String: OutputFileName = InputBox("Enter File Name") With regEx .Global = True .MultiLine = True .IgnoreCase = True .Pattern = strSpecChar End With If regEx.Test(OutputFileName) Then 'error msg End If 

我得到Compile Error: Invalid Character由于栏( | )字符Compile Error: Invalid Character错误。 我试过用反斜杠转义栏,但它不起作用。 有人可以帮忙吗? 我已经阅读了一些post,包括这一个,但没有帮助。

解决方法:看看下面的blog.tkacprow.pl的评论和Alex的回答(他帮助指出了一个错字,并解释错误5018.从上面的strSpecCharvariables中删除*

没有检查你的正则expression式是否正确,但是你已经在正则expression式中包含了字符" ,vba把它当作string的结尾,你可以用chr(34)来replace双引号:

 strSpecChar = "*[\/:*?" & Chr(34) & "<>]|*" 

实际上不需要使用正则expression式引擎来testingstring中是否存在一组字符。 您可以简单地使用VBA Like Operator来完成相同的任务,而无需引用外部库:

 Const strSpecChar As String = "*[\/:*?<>|]*" Dim OutputFileName As String: OutputFileName = InputBox("Enter File Name") If OutputFileName Like strSpecChar Then MsgBox "Error Message" End If 

或者,如果您想将双引号包含为要排除的字符之一:

 Const strSpecChar As String = "*[\/:*?<>|""]*" 

注意在字符类中使用双重双引号,以便告诉VBA包含该字符而不是标记string的末尾。