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

sgt*_*113 3 regex excel vba excel-vba

我正在写一个相当大的宏

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

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

谢谢大家!

bre*_*tdj 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
Run Code Online (Sandbox Code Playgroud)

有效名称功能

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
Run Code Online (Sandbox Code Playgroud)

清洁功能

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
Run Code Online (Sandbox Code Playgroud)