限制 find/replace 区域

Restrict find/replace region

我有一个宏来清理原始输入 phone 数字,它通常工作得很好, 除了 在我完成全局 (工作簿)查找或替换。如果我有脑放屁并且忘记从 "workbook" 更改回 "sheet" 模式,它将 运行 猖獗,杂乱无章地提取“-”和“。”工作簿中 所有 工作表上的数据和公式都是一样的,不管我 认为 我对其应用的约束如何。

我如何正确地限制它,这样我就不必每年花费几个小时多次恢复?

我现在拥有的:

Sheets("Data").Select  
Range("DataTbl[[Phone]:[Phone2]]").Select  ' DataTbl is 15 col x >800 row
Selection.Replace What:="  ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:=")", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:="-", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:="(", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

停止依赖 .SelectSelection 来定义您关注的领域。它可能在某些时候甚至大部分时间都有效,但由于固有的模棱两可性,它只会导致最终的错误。

Dim r As Range
On Error Resume Next
Set r = Cells.Find(What:=vbNullString, LookIn:=xlFormulas, _
                 SearchOrder:=xlRows, LookAt:=xlPart, MatchCase:=False)
On Error GoTo 0
With Sheets("Data").Range("DataTbl[[Phone]:[Phone2]]")  ' DataTbl is 15 col x >800 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
    .Replace What:=".", Replacement:=vbNullString, LookAt:=xlPart
End With

请参阅 How to avoid using Select in Excel VBA macros 了解摆脱 .Select 的各种方法。

编辑: 在开头添加了四行代码以将 'remembered' .Find 参数重置为默认值(例如 Within: Sheet,不在 内:工作簿)。