在工作表名称中replace多个无效字符

我正在写一个相当大的macros

  • 最后以用户input的名字保存工作簿。
  • 我正在使用这张表的标题,所以我需要删除任何保留的字符,将引发文件系统错误(/\*|?:<>")

我想避免必须使用大量的Replace()语句,那么有没有办法在一个语句中用下划线replace多个字符 – 更像是一个正则expression式 ?

谢谢大家!

令人高兴的是,你会发现这些字符大部分已经作为表名字符无效,即*?[]

但正如你所说,使用正则expression式 🙂

像下面的那样对有效的string返回True ,对于无效的string则为False

我已经添加了上面的项目,根据需要转义特殊字符。

[更新:补充更换function]

 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

 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

 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 

你看过干净() ?

另外,有点混乱,但我相信你可以使用“替代”

 Substitute( text, old_text, new_text, nth_appearance )