2015-02-05 5 views
1

У меня есть макрос для очистки исходных номеров телефонов, и он обычно отлично работает, кроме после того, как я сделал глобальную (рабочую книгу), найти или заменить. Если у меня есть мозговой пупок & забудьте перейти из «рабочей книги» в режим «листа», он будет работать безудержным, высокоуровневым извлечением »-« & ». из данных & формулы одинаковые на все листы в книге, независимо от ограничений, которые я думал Я применил к нему.Ограничить область поиска/замены

Как я могу сдержать его должным образом, поэтому мне не нужно тратить пару часов несколько раз в год на восстановление?

Что я сейчас:

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 

ответ

3

Стоп, опираясь на .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.

РЕДАКТИРОВАТЬ: Добавлено четыре строки коды в начале для сброса «» запоминаются .Find параметров по умолчанию (например, пределов: Лист, не В: Workbook).

+0

К сожалению, это было так же. Хорошо работал, когда Find/Replace был в режиме листа, но не в Workbook. :( –

+0

@DeinaUnderhill - я добавил минимальный объем кода, необходимый для сброса настроек «запомнить» .Find/.Replace' по умолчанию. – Jeeped

+0

Это работает отлично! –

Смежные вопросы