excel vba替换失败

excel vba替换失败,excel,excel-2010,vba,Excel,Excel 2010,Vba,我已经运行以下宏好几年了,直到最近都没有问题 在过去的几周里,我不得不手动更改到合适的工作表,然后它才能工作。今天它不再这样做了,所以我仔细检查了它&查看它在第一个replace语句之后退出,不管是否有数据要替换 Sub Clean_Phone() ' ' Clean_Phone Macro ' ' Last Update - 5 Feb 2015 ' Dim tSHeet As String Dim r As Range On Error Resume Next

我已经运行以下宏好几年了,直到最近都没有问题

在过去的几周里,我不得不手动更改到合适的工作表,然后它才能工作。今天它不再这样做了,所以我仔细检查了它&查看它在第一个replace语句之后退出,不管是否有数据要替换

Sub Clean_Phone()
'
' Clean_Phone Macro
'
' Last Update - 5 Feb 2015
'
    Dim tSHeet As String
    Dim r As Range
    On Error Resume Next    ' restore Find/Replace settings to default
    Set r = Cells.Find(What:=vbNullString, LookIn:=xlFormulas, _
                       SearchOrder:=xlRows, LookAt:=xlPart, MatchCase:=False)
    '    On Error GoTo 0
    tSHeet = ActiveSheet.Name

    Sheets("Data").Select  ' DataTbl is 15 col x > 1100 row
    With Sheets("Data").Range("DataTbl[[Latitude]:[Longitude]]")
        .Replace What:="°", Replacement:=vbNullString, LookAt:=xlPart
    End With

    Sheets("Data").Select
    With Sheets("Data").Range("DataTbl[[Phone]:[Phone2]]")  ' DataTbl is 15 col x >1100 row
        .Replace What:=" ", Replacement:=vbNullString, LookAt:=xlPart
        .Replace What:=")", Replacement:=vbNullString, LookAt:=xlPart
        .Replace What:="-", Replacement:=vbNullString, LookAt:=xlPart
        .Replace What:="(", Replacement:=vbNullString, LookAt:=xlPart
        .Replace What:=".", Replacement:=vbNullString, LookAt:=xlPart
    End With

    Range("DataTbl[[Phone]:[Phone2]]").NumberFormat = "[<=9999999]###-####;(###) ###-####"

    With Sheets("Data").Range("DataTbl[Address]")
        .Replace What:=" nw ", Replacement:=" NW ", LookAt:=xlPart
        .Replace What:=" ne ", Replacement:=" NE ", LookAt:=xlPart
        .Replace What:=" se ", Replacement:=" SE ", LookAt:=xlPart
        .Replace What:=" sw ", Replacement:=" SW ", LookAt:=xlPart
    End With
Sub-Clean_Phone()
'
'Clean_Phone宏
'
'最后更新-2015年2月5日
'
将纸张变暗为字符串
调光范围
出现错误时,继续下一步“将查找/替换设置恢复为默认设置”
设置r=Cells.Find(What:=vbNullString,LookIn:=xlFormulas_
SearchOrder:=xlRows,LookAt:=xlPart,MatchCase:=False)
'在出现错误时转到0
tSHeet=ActiveSheet.Name
表格(“数据”)。选择“数据TBL为15列x>1100行
带图纸(“数据”)。范围(“数据边界[[纬度]:[经度]”)
.Replace What:=“°”,Replacement:=vbNullString,LookAt:=xlPart
以
工作表(“数据”)。选择
带工作表(“数据”)。范围(“DataTbl[[Phone]:[Phone2]]”DataTbl为15列x>1100行
.Replace What:=“”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=“-”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=“(”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=”,Replacement:=vbNullString,LookAt:=xlPart
以

Range(“DataTbl[[Phone]:[Phone2]]”。NumberFormat=“[我不能说我得到了你的答案,但我可以回答几点,并给你一个小小的修改以尝试

您应该将On Error Resume Next和On Error Goto保留为0,因为它们是围绕该语句的失败捕获,您不知道它为什么存在。正如它所说的,它正在重置查找/替换默认值。我不知道这里是否需要它们,或者在搜索空单元格时是否需要失败捕获,但它不知道m将其保留在那里,但重置错误处理程序很重要

我会去掉选择数据表的语句,它是不必要的,并且更明智地使用WISS

我认为这是值得一试的修订守则

Sub Clean_Phone()
'
' Clean_Phone Macro
'
' Last Update - 5 Feb 2015
'
Dim tSHeet As String
Dim r As Range

    On Error Resume Next
    ' restore Find/Replace settings to default
    Set r = Cells.Find(What:=vbNullString, LookIn:=xlFormulas, _
                   SearchOrder:=xlRows, LookAt:=xlPart, MatchCase:=False)
    On Error GoTo 0
    tSHeet = ActiveSheet.Name

    With Sheets("Data")

        With .Range("DataTbl[[Latitude]:[Longitude]]")
            .Replace What:="°", Replacement:=vbNullString, LookAt:=xlPart
        End With

        With .Range("DataTbl[[Phone]:[Phone2]]")  ' DataTbl is 15 col x >1100 row
            .Replace What:=" ", Replacement:=vbNullString, LookAt:=xlPart
            .Replace What:=")", Replacement:=vbNullString, LookAt:=xlPart
            .Replace What:="-", Replacement:=vbNullString, LookAt:=xlPart
            .Replace What:="(", Replacement:=vbNullString, LookAt:=xlPart
            .Replace What:=".", Replacement:=vbNullString, LookAt:=xlPart

            .NumberFormat = "[<=9999999]###-####;(###) ###-####"
        End With

        With .Range("DataTbl[Address]")
            .Replace What:=" nw ", Replacement:=" NW ", LookAt:=xlPart
            .Replace What:=" ne ", Replacement:=" NE ", LookAt:=xlPart
            .Replace What:=" se ", Replacement:=" SE ", LookAt:=xlPart
            .Replace What:=" sw ", Replacement:=" SW ", LookAt:=xlPart
        End With
    End With
End Sub
Sub-Clean_Phone()
'
'Clean_Phone宏
'
'最后更新-2015年2月5日
'
将纸张变暗为字符串
调光范围
出错时继续下一步
'将查找/替换设置还原为默认设置
设置r=Cells.Find(What:=vbNullString,LookIn:=xlFormulas_
SearchOrder:=xlRows,LookAt:=xlPart,MatchCase:=False)
错误转到0
tSHeet=ActiveSheet.Name
带图纸(“数据”)
带.Range(“DataTbl[[纬度]:[经度]]”)
.Replace What:=“°”,Replacement:=vbNullString,LookAt:=xlPart
以
带.Range(“DataTbl[[Phone]:[Phone2]]”)的DataTbl是15列x>1100行
.Replace What:=“”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=“-”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=“(”,Replacement:=vbNullString,LookAt:=xlPart
.Replace What:=”,Replacement:=vbNullString,LookAt:=xlPart
.NumberFormat=“[我发现了问题

我打开了一个完全不同的工作簿,它干扰了这一个。我不知道如何-他们没有共享任何模块,但当我关闭它时,这一个开始正常工作


感谢大家的努力!

手动更改到正确的工作表
..
tSHeet=ActiveSheet.Name
猜测这就是为什么…注释掉错误恢复时的
,然后查看错误发生的位置
tSHeet=ActiveSheet.Name
仅用于从其他位置调用时返回调用工作表。下一步在错误恢复时注释掉
没有影响。谢谢你,鲍勃!这看起来比我的代码优雅得多,应该运行得更快。