我正在写一个相当大的宏
(/\*|?:<>")
。我想避免使用大量的Replace()
语句,那么有没有办法在一个语句中用下划线替换多个字符 - 更像是regexp?
全部谢谢!
答案 0 :(得分:7)
很高兴您会发现大多数这些字符已作为工作表名称字符无效,即*?[]
等
但正如您已经说过的那样,请使用regexp:)
如下所示返回True
表示有效字符串,False
表示无效字符串。
我已添加上面的项目,根据需要转义特殊字符。
[已更新:已添加替换功能]
Sub TestCleanNames()
Dim StrArr()
Dim StrTst
StrArr = Array("Am i ok", "Sheet||a", "audited??", "Sheet1")
For Each StrTst In StrArr
MsgBox StrTst & " = " & ValidSheetName(CStr(StrTst)) & vbNewLine & CleanSheetName(CStr(StrTst))
Next
End Sub
有效名称功能
Function ValidSheetName(strIn As String) As Boolean
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
objRegex.Pattern = "[\<\>\*\\\/\?|]"
ValidSheetName = Not objRegex.test(strIn)
End Function
清洁功能
Function CleanSheetName(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "[\<\>\*\\\/\?|]"
CleanSheetName = .Replace(strIn, "_")
End With
End Function
答案 1 :(得分:0)