繁体   English   中英

VBA RegExp特殊字符

[英]VBA RegExp for Special Characters

当用户为我的宏的输出输入“另存为”名称时,我要检查是否会导致保存文件错误的特殊字符- [\\/:*?<>|]

我这样使用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错误。 我尝试用反斜杠转义栏,但是它不起作用。 有人可以帮忙吗? 我读过几篇文章,包括这篇文章,但没有帮助。

解决方案:看看下面blog.tkacprow.pl的注释和Alex的回答(他帮助指出了一个错字并解释了错误5018。从上面的strSpecChar变量中删除*

没有检查您的正则表达式是否正确,但是您在正则表达式中包含了字符" ,vba将其视为字符串的结尾。您可以使用chr(34)替换双引号:

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

确实没有必要使用正则表达式引擎来测试字符串中一组字符之一的存在。 您可以简单地使用VBA Like运算符来完成相同的任务,而无需引用外部库:

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包括双引号而不是标记字符串的结尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM