Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2011, 11:35   #1
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию Обновление листа excel

Добрый день!

Подскажите, пожалуйста, какие команды отключают обновления листа?

Пробовал искать в инете - нашел только
"EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге."


Есть ли ещё какие-нибудь команды, отключающие автоматический пересчет/обновление листа?

В идеале хочу сделать так (для ускорения работы макроса):

1. Отключаем обновление листа
2. Выполняется макрос
3. Включаем обновление

Желательно, чтобы команда отключала только визуальное изменение значений в ячейке.

То есть при использовании в макросе cells.value - результат был бы актуальный на текущий момент вычислений.
-Anton- вне форума Ответить с цитированием
Старый 05.09.2011, 11:43   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот даже так нашёл - тут много файлов кодом открывалось/закрывалось:

With Application
'отлючаем обновление экрана - это убыстрит работу макроса
.ScreenUpdating = False
'включаем ручной пересчёт формул - это убыстрит работу макроса
.Calculation = xlManual
'отключаем отображения окон на панели задач на время выполнения макроса
.ShowWindowsInTaskbar = False
...
'тут собственно весь код
...
'включаем автоматический пересчёт формул, который отключили в начале макроса
.Calculation = xlAutomatic
'включаем отображения окон на панели задач, которое отключали в начали макроса
.ShowWindowsInTaskbar = True
'включаем обновление экрана, который отключили в начале макроса
.ScreenUpdating = True
End With

Или такой вариант - дополнительно две процедуры, которые вызываются в начале и конце кода:

Private Sub App_Off()
With Application
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
End Sub

Private Sub App_On()
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub

.EnableEvents - это чтоб не выполнялись события.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 05.09.2011 в 11:47.
Hugo121 вне форума Ответить с цитированием
Старый 05.09.2011, 11:56   #3
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Ух сколько всего сразу!!! Спасибо, буду тестить!!
-Anton- вне форума Ответить с цитированием
Старый 05.09.2011, 12:08   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вообще-то правильнее запоминать состояние пересчёта, чтоб юзера с толку не сбивать.
Целиком это так выглядит (нашёл такой небольшой пример):

Код:
Option Explicit 

Sub ImportData() 
Dim s$, x, cc As Range, diap$ 
Dim n&, m&, calc_status 

diap = InputBox("Запрос строк", "Введите данные вида n/m") 
If diap = "" Then Exit Sub 
n = Split(diap, "/")(0) 
m = Split(diap, "/")(1) 

With Application 
.EnableEvents = False 
.ScreenUpdating = False 
calc_status = .Calculation 
.Calculation = xlCalculationManual 
End With 

With CreateObject("Scripting.dictionary") 
.CompareMode = 1 'TextCompare 
Open "C:\temp\Ed_Vard\2\loaded.txt" For Input As #1 
Do Until EOF(1) 
Line Input #1, s 
If InStr(s, "/") Then 
x = Split(s, "/")(0) 
If x <> "" Then .Item(x) = Replace(Split(s, "/")(1), " ", "") 
End If 
Loop 
Reset 

For Each cc In Range(Cells(n, 1), Cells(m, 1)) 
If .exists(cc.Value) Then cc.Offset(, 14) = .Item(cc.Value) 
Next 
End With 

With Application 
.Calculation = calc_status 
.EnableEvents = True 
.ScreenUpdating = True 
End With 

End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль на открытие листа в Excel gkorolik Microsoft Office Excel 6 19.12.2010 19:26
Обновление части листа Флина Microsoft Office Excel 3 25.10.2010 13:48
сохранение листа Excel в отдельном файле mmzzmm Microsoft Office Excel 2 07.10.2010 15:51
размер листа в excel Доктор Microsoft Office Excel 1 08.06.2010 09:54