Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Виснет файл после выполнения макроса

Автор Настя, 26.10.2014, 01:48:39

« назад - далее »

Настя

Добрый вечер!
Проблема следующая: после выполнения макроса по добавлению строк в файл excel - файл начинает ужасно виснуть. То же самое делаю вручную - все отлично, макросом - виснет. В другом файле помогло после того как отлючила применение функции "формат по образцу". Тут не помогло.
Основные используемые функции (кусок кода):
       Range("A" & r - 1 & ":M" & r - 1).Select
       Selection.Copy
       Range("A" & r).Select
       ActiveSheet.Paste
       Application.CutCopyMode = False
       .Cells(r, 1) = i
       Selection.Replace What:="[" & zak_pr, Replacement:="[" & s, LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
        Range("C" & r).Select
       Application.ReferenceStyle = xlA1
       ActiveCell.FormulaR1C1 = _
       "='[" & i & ".xls]Лист1'!R[" & 11 - r & "]C[-1]"
       ActiveCell.FormulaR1C1 = _
       "=RC[-3]-RC[-2]-RC[-1]"
        Range("I" & r - 1).Select
       Selection.Copy
       Range("I" & r).Select
       ActiveSheet.Paste
       Application.CutCopyMode = False
       Range("K" & r).Select
       ActiveCell.FormulaR1C1 = _
       "='[" & i & ".xls]Лист1'!R6C23"

И так несколько значений ячеек добавляется. Остальные функции: открытие файла и присваивание значение переменной.
Из-за чего это может происходить?????

[gmod]для оформления кода есть кнопка - "VB Code"[/gmod]

     

Дмитрий Щербаков(The_Prist)

Для начала чуть оптимизируем:
       Range("A" & r - 1 & ":M" & r - 1).Copy Range("A" & r)
       .Cells(r, 1) = i  
       Range("A" & r).Replace What:="[" & zak_pr, Replacement:="[" & s, LookAt:=xlPart, _  
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
       'Application.ReferenceStyle = xlA1  'так же совершенно лишняя строка в данном случае
       Range("C" & r).FormulaR1C1 = "='[" & i & ".xls]Лист1'!R[" & 11 - r & "]C[-1]"  
 'зачем это?! Ведь этим затирается предыдущая формула. Надо определиться какая из них нужна
       Range("C" & r).FormulaR1C1 = "=RC[-3]-RC[-2]-RC[-1]"
       Range("I" & r - 1).Copy Range("I" & r)  
       Range("K" & r).FormulaR1C1 = _  
       "='[" & i & ".xls]Лист1'!R6C23"

Далее, в начало выполнения кода вставьте строки:
Application.ScreenUpdating = False
Application.Calculation = xlManual

а перед завершением кода(как правило прямо перед End Sub):
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic

это значительно увеличит скорость выполнения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Настя

The_Prist, добрый!

Понимаете, дело не в скорости выполнения самого макроса: на данном этапе это не критично. Дело в том, что когда макрос отработал при дальнейшей работе с этим файлом - он начинает виснуть, после нескольких выполнений данного макроса вообще файл при дальнейшей работе прекращает отвечать на запросы.

Дмитрий Щербаков(The_Prist)

Значит нужен файл, а не только код. Код нормальный и не может приводить к краху. Дело не в нем. Дело в файле - возможно, в нем есть еще что-то, что рушится после выполнения кода.

Плюс Вы написали именно "виснет" файл, а не Excel в целом и навечно :-)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru