Страницы: 1
RSS
Помогите избавить код от Select
 
Добрый день. Есть макрос, основное назначение которого производить замены текстовых значений в файле. макрос очень медленно работает, меня терзают смутные сомнения,что виной тому куча селктов в коде. Подскажите, как можно оптимизировать вот такой кусок?  
Sheets("КВВ").Select  
   Range("B1:B200").Select  
   Selection.Replace What:="123", 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  
 
и так далее в том же стиле.
 
Попробуйте так  
 
Application.ScreenUpdating = False  
 
Sheets("КВВ").Range("B1:B200").Replace what:="123", replacement:="Раздватри", lookAt:=xlPart  
и т.д.  
 
 
Application.ScreenUpdating = True
 
{quote}{login=sva}{date=15.11.2010 04:06}{thema=}{post}Попробуйте так  
 
Application.ScreenUpdating = False  
 
Sheets("КВВ").Range("B1:B200").Replace what:="123", replacement:="Раздватри", lookAt:=xlPart  
и т.д.  
 
 
Application.ScreenUpdating = True{/post}{/quote}  
Application.ScreenUpdating  не подходит, в процессе выполнения макрос запрашивает у пользователя информацию, в каком диапазоне производить часть действий. а вот остальное попробую сейчас, спасибо)))
 
Если замен много, то можно ещё укоротить код:  
 
Sub test()  
   Application.ScreenUpdating = False  
   With Sheets("КВВ").Range("B1:B200")  
       .Replace "123", "Раздватри"  
       .Replace "привет", "пока"  
       .Replace "ююю", "жжжж"  
       ' ...  
   End With  
End Sub  
 
 
PS: Если количество строк заранее неизвестно, можно и так написать:  
With Sheets("КВВ").Range("B:B")
 
Тогда так.  
 
Application.ScreenUpdating = False  
 
Range("a1:a200").Replace what:="1", replacement:="Раздватри", lookAt:=xlPart  
 
Application.ScreenUpdating = True  
 
off_ = Application.InputBox("Ввведите количество столбцов", "Смещение на...")  
 
Application.ScreenUpdating = False  
Range("a1:a200").Replace what:="Раздватри", replacement:="1", lookAt:=xlPart  
Application.ScreenUpdating = True
 
PS: Если количество строк заранее неизвестно, можно и так написать:  
With Sheets("КВВ").Range("B:B")(с)  
 
А это не замедлит выполнение? всё-таки диапазон короче, чем целый столбец. Я ставлю 200, потому что больше двухсот строк обычно не бывает
 
{quote}{login=Светлана В}{date=15.11.2010 04:21}{thema=}{post}PS: Если количество строк заранее неизвестно, можно и так написать:  
With Sheets("КВВ").Range("B:B")(с)  
 
А это не замедлит выполнение? всё-таки диапазон короче, чем целый столбец. Я ставлю 200, потому что больше двухсот строк обычно не бывает{/post}{/quote}  
 
Скорее всего, не замедлит.  
Как-то давно проверял - особой разницы не заметил.  
 
Вот ещё 2 варианта с автоматическим определением диапазона:  
 
 
   With Intersect(Sheets("КВВ").Range("B:B"), Sheets("КВВ").UsedRange)  
 
     
   With Sheets("КВВ").Range(Sheets("КВВ").[B1], Sheets("КВВ").Range("B" & Rows.Count).End(xlUp))
 
{quote}{login=EducatedFool}{date=15.11.2010 04:24}{thema=Re: }{post}{quote}{login=Светлана В}{date=15.11.2010 04:21}{thema=}{post}PS: Если количество строк заранее неизвестно, можно и так написать:  
With Sheets("КВВ").Range("B:B")(с)  
 
А это не замедлит выполнение? всё-таки диапазон короче, чем целый столбец. Я ставлю 200, потому что больше двухсот строк обычно не бывает{/post}{/quote}  
 
   
   With Sheets("КВВ").Range(Sheets("КВВ").[B1], Sheets("КВВ").Range("B" & Rows.Count).End(xlUp)){/post}{/quote}
О! Вот этот вариант лучше всего!  
Спасибо за помощь!  
Тему можно закрывать
Страницы: 1
Читают тему
Наверх