替换工作表名称中的多个无效字符

时间:2011-12-21 13:51:53

标签: regex excel vba excel-vba

我正在写一个相当大的宏

  • 以使用用户之前输入的名称保存工作簿而结束。
  • 我正在使用工作表的标题,因此我需要删除任何会引发文件系统错误的保留字符(/\*|?:<>")

我想避免使用大量的Replace()语句,那么有没有办法在一个语句中用下划线替换多个字符 - 更像是

全部谢谢!

2 个答案:

答案 0 :(得分:7)

很高兴您会发现大多数这些字符已作为工作表名称字符无效,即*?[]

但正如您已经说过的那样,请使用:)

如下所示返回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)

你看过clean()吗?

或者,有点麻烦,但我相信你可以使用'substitute'

Substitute( text, old_text, new_text, nth_appearance )