【问题标题】:VBA to remove special characters before saving workbookVBA在保存工作簿之前删除特殊字符
【发布时间】:2015-09-01 19:21:07
【问题描述】:

我发现这个功能可以删除特殊字符。

Function Remove_Characters(s As String) As String
Static RegEx As Object
    If RegEx Is Nothing Then
        Set RegEx = CreateObject("VBScript.RegExp")
        With RegEx
        .Global = True
        .Pattern = "\\|/|:|\*|""|\?|<|>\|| "
        End With
    End If
Remove_Characters = RegEx.Replace(s, "")
End Function

我想知道的是如何在保存工作簿之前使用它自动删除某些单元格范围(B47:L47,B51:L148)中的所有特殊字符?

【问题讨论】:

  • 循环遍历特定范围内的单元格集合,并在循环的每个步骤中调用上述函数。

标签: vba excel special-characters


【解决方案1】:

请阅读我对该问题的评论。这应该可以帮助您:

Dim rng As Range, c As Range
Set rng = ThisWorkbook.Worksheets("Arkusz1").Range("B47:L47,B51:L148")
For Each c In rng.Cells
    c.Value = Remove_Characters(c.Value)
Next c

【讨论】:

  • 如果范围是单个单元格地址,但如果我输入 ("B47:L47,B51:L148") 它返回运行时错误 '1004':方法 'Range' of object '_Global ' 失败的。它有什么问题?
  • 哦,我忘了补充一点,您必须将范围指定为ThisWorkbook.Worksheets("WshName").Range("Address")。如果这没有帮助,请告诉我。
  • For Each c In ThisWorkbook.Worksheets("Arkusz1").Range("B47:L47,B51:L148") 返回运行时错误“9”:下标超出范围。这是正确的语法吗?
  • 请看更新的答案;)我测试了它,没有收到任何错误。
  • 我在 ThisWorkbook 中使用 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel as Boolean) 调用此子程序,当从 Excel 保存工作簿时,我没有收到任何错误,但是当我从 MS Visual Basic 编辑器保存文件时,它仍然给我“运行-时间错误'9':下标超出范围”错误。
【解决方案2】:

您可能希望使用 Workbook_BeforeSave 事件。每当有人推送保存时,此代码就会运行。下一步是遍历你的范围并运行你的函数。

可以找到类似的答案:Excel VBA - Run macro before save

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
        Cancel as Boolean) 
    a = MsgBox("Do you really want to save the workbook?", vbYesNo) 
    If a = vbNo Then Cancel = True 
End Sub

【讨论】:

  • 感谢触发。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
相关资源
最近更新 更多