【问题标题】:Replacing multiple invalid characters in a sheet name [closed]替换工作表名称中的多个无效字符[关闭]
【发布时间】:2012-01-25 07:49:54
【问题描述】:

我正在写一个相当大的宏

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

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

谢谢大家!

【问题讨论】:

    标签: regexp regex vba excel


    【解决方案1】:

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

    但正如你已经说过的,使用 :)

    如下所示返回 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 您不需要测试反斜杠、/*?,因为它们是禁止的工作表名称字符。
    • 我在这里的措辞不是特别清楚 - 不幸的是,实际工作表名称和我所指的名字不同 - 我的名字进入工作表的标题!但是,brettdj 对此的回应非常完美,谢谢!
    【解决方案2】:

    你看过clean()吗?

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

    Substitute( text, old_text, new_text, nth_appearance )
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多