限制 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
停止依赖 .Select
和 Selection
来定义您关注的领域。它可能在某些时候甚至大部分时间都有效,但由于固有的模棱两可性,它只会导致最终的错误。
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,不在 内:工作簿)。
我有一个宏来清理原始输入 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
停止依赖 .Select
和 Selection
来定义您关注的领域。它可能在某些时候甚至大部分时间都有效,但由于固有的模棱两可性,它只会导致最终的错误。
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,不在 内:工作簿)。