字符替换VBA函数出错

时间:2014-02-18 15:28:08

标签: excel-vba vba excel

考虑以下VBA功能:

Sub RemoveLetters()
    Application.ScreenUpdating = False

    Dim str As String: str = "abcdefghijklmnopqrstuvwxyz0123456789 "
    Dim ltr As String

    For i = 1 To 37

        ltr = Mid(str, i, 1)

        Sheet9.Range("A2:A1800").Replace _
            What:=ltr, Replacement:="", MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Next
    Application.ScreenUpdating = True

End Sub

此函数删除给定字符串中的所有字母和数字字符。但是,我遇到的错误是,只要字符串以非字母,非数字字符串开头,它就无法在该字符串上执行,并且不会在任何其他字符串上执行。也就是说,运行到这样的字符串会停止执行。是否有明显的原因发生这种情况?我该如何修改此代码来修复它?

1 个答案:

答案 0 :(得分:2)

对于匹配模式,最佳选项为regular expressions或更常见的regex。通过定义要遵循的设置模式,您可以提取或替换几乎任何您想要的模式。

要替换所有非数字和非字母字符以及空格,可以使用以下小功能:

Function NoNormalChar(StrTarget As String) As String
    Dim oRegEx As Object
    Set oRegEx = CreateObject("vbscript.regexp")
    With oRegEx
        .Pattern = "[a-zA-Z0-9\s]+"
        .Global = True
        NoNormalChar = .Replace(StrTarget, "")
    End With
End Function

在sub中调用它很简单:

Sub RemoveLetters()
    Dim Rng As Range, Cell As Range
    Application.ScreenUpdating = False
    Set Rng = Sheet9.Range("A2:A1800")
    For Each Cell In Rng
        Cell.Value = NoNormalChar(Cell.Value)
    Next Cell
    Application.ScreenUpdating = True
End Sub

将两者复制并粘贴到单个模块中。运行备份副本,让我们知道结果。