【问题标题】:Command button code to replace special characters替换特殊字符的命令按钮代码
【发布时间】:2015-05-21 20:18:06
【问题描述】:

我没有接受过任何 VB 培训,我只是使用我在网上可以找到的东西来修改我的代码。

我有下面的代码(如果多余,请原谅)一个 ActiveX 命令按钮,它允许我从我的 Excel 电子表格(MS Office 2007)中的特定单元格中绘制值,并将这些值用作文件名的一部分以将其保存在指定的文件夹。但是,某些单元格包含文件名中不允许出现的字符(例如 /:*?"|)。

如何修改以下代码以用破折号(“-”)替换此类禁止字符?

Private Sub CommandButton1_Click()
    Dim Path As String
    Dim FileName1 As String
    Dim FileName2 As String
    Dim FileName3 As String
    Dim FileName4 As String
    Dim FileName5 As String
    Dim FileName6 As String
    Dim FileName7 As String
    Dim str As String, strLeft As String
    str = Range("O7")
    strLeft = Left(str, 9)
    FileName1 = strLeft
    FileName2 = Range("Q7")
    FileName3 = Range("W7")
    FileName4 = Range("A7")
    FileName5 = Range("I7")
    FileName6 = Range("D7")
    FileName7 = Range("E7")
    Path = "C:\Users\Desktop\CURRENT PROJECTS\CatchAll\"
    ActiveWorkbook.SaveAs FileName:=Path & FileName1 & "_" & FileName2 & "_" &
    FileName3 & "_" & FileName4 & "_" & FileName5 & "_" & FileName6 & "_" &
    FileName7 & "_" & ".xls", FileFormat:=xlCSV
End Sub

【问题讨论】:

    标签: excel button command excel-2007 vba


    【解决方案1】:

    用“-”替换所有字符可能是个坏主意。您最终可能会得到一个很长的文件名。

    我使用这个简单的函数来清理任何字符串以获得正确的文件名。希望这对您有所帮助?

    Function strClean(strIn As String) As String
        Dim objRegex As Object
        Set objRegex = CreateObject("vbscript.regexp")
        With objRegex
            .Pattern = "[\[\]|\/\\:\*\?""<>]"
            .Global = True
            strClean = .Replace(strIn, vbNullString)
        End With
    End Function
    

    【讨论】:

    • 谢谢,西达斯。这也有效,但文件名需要“-”。此外,被否认的角色在两者之间也很少。再次感谢您的好建议。将保留它用于其他目的。
    • 如果您需要“-”,请将vbNullString 更改为"-"。就这么简单:)
    【解决方案2】:

    也许构建一个函数来替换不需要的字符:

    Function RepCh(str As String)
    
    myarray = Array("/", ":", "*", "?", Chr(34), "<", ">", "|")
    
    For i = LBound(myarray) To UBound(myarray)
        If i = LBound(myarray) Then
            NewStr = Replace(str, myarray(i), "-")
        Else
            NewStr = Replace(NewStr, myarray(i), "-")
        End If
    Next i
    RepCh = NewStr
    End Function
    

    那么你的字符串变量将是

    Filename2 = RepCh(Range("Q7").value) ' or RepCh(cstr(Range("Q7").value))
    

    但我不知道所有被拒绝的字符,查找它们并将其添加到“myarray”

    【讨论】:

    • 像魔术一样工作,费德里科。正是我需要的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2014-07-29
    • 2013-01-28
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多