Событие типа Workbook_BeforeOpen()

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Проблема: Есть книга 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 мин. :(
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

pilligrim,
Первое что приходит в голову - выключите автоматический пересчёт по умолчанию и включайте его в вашем макросе.
Второе - сделайте надстройку, которая будет отключать пересчёт (и открывать вашу рабочую книгу).
Третье - сделайте скрипт на WSH, котрый будет открывать Excel, спрашивать пользователя о необходимости пересчёта и в случае необходимости его отключать и
открывать книгу.
Четвёртое - поместить ваш макрос в personal.xls. В этом макросе субклассировать
Excel (но стоит ли проблема того ?)
Успехов.
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Надо этот код поместить в модуль листа ЭтаКнига(Thisworkbook)
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Aent, Создать макрос который отключает пересчет и открывает файл тоже решение, но она не удобна когда файл открывается с explorer'a.
все время отключенный автопересчет тоже не есть хорошо. (т.к. остальные файлы пересчитываются нормально.)
&quot писал(а):Надо этот код поместить в модуль листа ЭтаКнига(Thisworkbook)
Она там и прописана, работает нормально. проблема в последовательности срабатывания. В начале срабатывает автопересчет а потом лишь спрашивает отключить или нет автопересчет.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Может как это сгодится...

ПОМОГИТЕ! Дурацкий автоматический пересчет в Excel
http://forum.developing.ru/showthread.php?t=4507
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Спасибо, интересная тема. Я ее уже читал.
Тоже не годится, т.к. у меня 4 массивных листа. пересчет одной из них занимает 5 минут.
В любом случае спасибо за внимание.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

pilligrim, посмотрел я как работает 2003 Excel. Несколько непонятна Ваша проблема.
1) Открываем Ваш файл.
2) Устанавливаем в Cервис->Параметры->Вычисления : Вручную, Без пересчёта при сохранении.
3) Сохраняем файл.
При открытии ЭТОГО файла пересчёт будет выключен. При открытии другого
файла установлен по ЕГО параметрам. Т.е. если вы при сохранении его не отключите - он будет включён.
4) Как вы и планировали можно добавить макрос для запроса пересчёта при
открытии. А можно просто нажимать F9 ;)
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Да вы меня не совсем правильно поняли.
1) У меня всегда включен автоматический пересчет. Это нужно мне для работы.
2) Есть некий огромный файл с формулами, пересчет одного простого листа в нем занимает 5 мин. в общем пересчет всего файла занимает 20 мин.
3) так как автоматический пересчет включен, при открытии данного файла начинается автоматический пересчет. (который занимает 20 мин).
4) вопрос: Как сделать так, что при открытии этого файла на любом компьютере автоматический пересчет отключался автоматически, перед тем как начнется сам пересчет?
bi-lya
Сообщения: 97
Зарегистрирован: 07 июн 2007, 14:08

Вы можете отключать событием типа Workbook_BeforeClose автоматический пересчет перед закрытием ЭТОЙ книги и включать вручную, как советует Aent
Ответить