限制查找/replace区域

我有一个macros来清理原始input的电话号码, 除了在我完成全局(工作簿)查找或replace的罕见情况之外 ,它通常工作得很好。 如果我有一个大脑放屁,忘记从“工作簿”切换回“表单”模式,它将运行猖獗,高风险,肮脏的提取“ – ”和“。 在工作簿中的所有表单上都使用了数据和公式,而不pipe我认为我应用了哪些限制。

我如何正确地限制它,所以我不必每年花几个小时几次恢复?

我现在拥有的:

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 

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

 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 

请参阅如何避免使用在Excel VBAmacros中select多种方法来避免。select 。

编辑:添加四行代码在开始将“记忆” .Find参数重置为默认值(例如在:工作表 ,不在:工作簿 )。