Страница 1 из 1
Событие типа Workbook_BeforeOpen()
Добавлено: 08 янв 2008, 08:41
pilligrim
Проблема: Есть книга xls. Пересчет занимает примерно 20 мин.
хочу чтоб перед открытием этой книги спрашивал отключить автоматический пересчет или нет. Скрипт написал, работает как хочу.
Код: Выделить всё
Private Sub Workbook_Open()
If Application.Calculation <> xlCalculationManual Then
If MsgBox("Вы хотите отключить автоматический пересчет?", vbYesNo + vbQuestion, "Включен автоматический расчет.") = vbYes Then
Application.Calculation = xlCalculationManual
Application.CalculateBeforeSave = False
End If
End If
End Sub
Но возник вопрос куда его прописать чтоб он запускался перед открытием книги.
События Workbook_Open() и Auto_Open() срабатывают только после открытия книги и завершения пересчета, т.е. только через 20 мин.

Re: Событие типа Workbook_BeforeOpen()
Добавлено: 08 янв 2008, 12:41
Aent
pilligrim,
Первое что приходит в голову - выключите автоматический пересчёт по умолчанию и включайте его в вашем макросе.
Второе - сделайте надстройку, которая будет отключать пересчёт (и открывать вашу рабочую книгу).
Третье - сделайте скрипт на WSH, котрый будет открывать Excel, спрашивать пользователя о необходимости пересчёта и в случае необходимости его отключать и
открывать книгу.
Четвёртое - поместить ваш макрос в personal.xls. В этом макросе субклассировать
Excel (но стоит ли проблема того ?)
Успехов.
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 08 янв 2008, 16:34
Pavel55
Надо этот код поместить в модуль листа ЭтаКнига(Thisworkbook)
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 09 янв 2008, 09:50
pilligrim
Aent, Создать макрос который отключает пересчет и открывает файл тоже решение, но она не удобна когда файл открывается с explorer'a.
все время отключенный автопересчет тоже не есть хорошо. (т.к. остальные файлы пересчитываются нормально.)
" писал(а):Надо этот код поместить в модуль листа ЭтаКнига(Thisworkbook)
Она там и прописана, работает нормально. проблема в последовательности срабатывания. В начале срабатывает автопересчет а потом лишь спрашивает отключить или нет автопересчет.
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 09 янв 2008, 14:15
Avsha
Может как это сгодится...
ПОМОГИТЕ! Дурацкий автоматический пересчет в Excel
http://forum.developing.ru/showthread.php?t=4507
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 09 янв 2008, 14:57
pilligrim
Спасибо, интересная тема. Я ее уже читал.
Тоже не годится, т.к. у меня 4 массивных листа. пересчет одной из них занимает 5 минут.
В любом случае спасибо за внимание.
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 09 янв 2008, 20:02
Aent
pilligrim, посмотрел я как работает 2003 Excel. Несколько непонятна Ваша проблема.
1) Открываем Ваш файл.
2) Устанавливаем в Cервис->Параметры->Вычисления : Вручную, Без пересчёта при сохранении.
3) Сохраняем файл.
При открытии ЭТОГО файла пересчёт будет выключен. При открытии другого
файла установлен по ЕГО параметрам. Т.е. если вы при сохранении его не отключите - он будет включён.
4) Как вы и планировали можно добавить макрос для запроса пересчёта при
открытии. А можно просто нажимать F9

Re: Событие типа Workbook_BeforeOpen()
Добавлено: 11 янв 2008, 08:04
pilligrim
Да вы меня не совсем правильно поняли.
1) У меня всегда включен автоматический пересчет. Это нужно мне для работы.
2) Есть некий огромный файл с формулами, пересчет одного простого листа в нем занимает 5 мин. в общем пересчет всего файла занимает 20 мин.
3) так как автоматический пересчет включен, при открытии данного файла начинается автоматический пересчет. (который занимает 20 мин).
4) вопрос: Как сделать так, что при открытии этого файла на любом компьютере автоматический пересчет отключался автоматически, перед тем как начнется сам пересчет?
Re: Событие типа Workbook_BeforeOpen()
Добавлено: 11 янв 2008, 13:45
bi-lya
Вы можете отключать событием типа Workbook_BeforeClose автоматический пересчет перед закрытием ЭТОЙ книги и включать вручную, как советует Aent