Макрос события открытия рабочей книги Excel не всегда выполняется - PullRequest
8 голосов
/ 26 марта 2011

У меня есть макрос события Workbook_Open (и он находится в ThisWorkbook), который не всегда запускается.

  • Если Excel закрыт, и я дважды щелкаю файл .xls в проводнике Windows, он запускается.
  • Если я запускаю Excel из «Пуск / Программы» (без файла .xls), а затем открываю файл, он запускается.
  • Если я уже открыл файл в Excel, но затем закрыл файл (оставив Excel открытым) и снова открыл его, то макрос не запускается.

У меня установлено среднее значение безопасности, и я включаю макросы всякий раз, когда он открывается.

Что мне нужно сделать, чтобы макрос запускался всякий раз, когда я его открываю, а не только в первый раз для этой сессии Excel?

(кстати, это Excel 2003)

Ответы [ 11 ]

4 голосов
/ 26 марта 2011

Я думал, что это была самая убедительная статья по этой проблеме (которая является давней, никогда не объяснявшейся совершенно ошибочной ошибкой, которую демонстрирует Excel). (неработающая ссылка)

Короче говоря, во многих случаях это связано с синхронизацией, потому что рабочая книга пытается вычислить материал, когда она открывается, и это мешает событию Workbook_Open.Чтобы проверить, подходит ли он для этой ситуации, сначала переименуйте все UDF или макросы, вызываемые ячейками, чтобы они не вызывались, и посмотрите, изменит ли это что-либо.

2 голосов
/ 10 ноября 2016

Я столкнулся с почти идентичным поведением и обнаружил, что это связано с ошибкой, возникающей при сбое правил условного форматирования. Оказывается, что если правила условного форматирования основаны на какой-либо настройке макросов, и это приводит к ошибке условного форматирования, макрос Workbook_Open даже не пытается запускаться.

Для проверки сделайте копию своего файла и удалите все условное форматирование из рабочей книги. Сохраните и снова откройте. Если это решит вашу проблему, измените правила условного форматирования, чтобы они не зависели от функций / значений, которые будут нарушены до выполнения макроса Workbook_Open.

2 голосов
/ 19 февраля 2015

Поздний ответ (лучше, чем ничего).

У меня была эта проблема несколько раз (с Excel 2010).Решение, которое всегда работало (до сих пор), было: удалите условное форматирование, особенно если оно содержит UDF в качестве условий.Как писал @LanceRoberts в вышеприведенном посте, это в конечном итоге связано с тем, что вычисления UDF «переопределяют» событие Open, но я обнаружил, что они особенно вредны, если используются в условных форматах.

2 голосов
/ 12 сентября 2014

У меня возникла такая же проблема.

Я без проблем протестировал книгу на своем компьютере.После передачи его моим клиентам мне сказали, что некоторые комбо-боксы остались пустыми.Они обычно заполняются изнутри процедуры workbook_open.Я пробовал разные вещи, чтобы включить workbook_open -Event - без успеха.

Наконец, я обнаружил, что отключение всех пользовательских функций (UDF) приводит к правильному выполнению workbook_open.

Asмоя рабочая книга открывается из другого файла, я постараюсь сначала установить расчет вручную, а затем вручную запустить workbook_open.Это можно сделать, определив его

public sub workbook_open

вместо

private sub workbook_open

Странно, что excel не рассчитывает время сам по себе ...

0 голосов
/ 03 февраля 2018

Чтобы добавить в сообщение Arturo Llano: Следующий код использовался для отслеживания события Workbook_Open и последующего запуска ProcessX при каждом открытии рабочей книги.

ProcessX содержал инструкцию End.Результатом стало то, что это сработало только в первый раз.Конец уничтожил AppX, поэтому больше не было мониторинга событий.Удаление End решило проблему.(Использование End в любом случае является плохой практикой, поскольку оно останавливает все без какой-либо очистки или прекращения использования других ресурсов.)

0 голосов
/ 02 августа 2017

Это также случилось со мной и заняло у меня часы, чтобы понять.

Оказывается, проблема СЕГОДНЯ () в Excel была причиной проблемы. После удаления из моего листа все снова заработало. Очень странная ошибка.

0 голосов
/ 27 июня 2017

Причина в том, что ваш другой архив, тот, который вы открыли первым, имеет процедуру Workbook_Open;Excel не оправдывает это во второй раз.

0 голосов
/ 28 марта 2017

Это происходит, когда рабочая книга закрывается с Application.EnableEvents, установленным в false, и затем вы открываете другую рабочую книгу в том же экземпляре открытого Excel. Чтобы избежать этого, убедитесь, что все ваши процессы, которые отключают события, включите их до завершения. Особое внимание уделяется командам «End», обработчикам ошибок и предложениям «exit sub» в середине вашей программы.

0 голосов
/ 12 мая 2016

Была такая же проблема, и я думаю, что у меня есть.Я должен был установить частный саб Workbook_BeforeClose, который сохранял книгу, если она не была только для чтения;и Workbook_BeforeSave, обеспечивающий Application.EnableEvents = True.Это, кажется, позволяет Workbook_Open срабатывать.Не уверен на 100% почему , но кажется повторяющимся, в том числе в новой пустой книге.

0 голосов
/ 24 сентября 2015

Я столкнулся с той же проблемой, и я избегаю ее, используя настройки безопасности.Я использую настройки параметров, затем центр конфиденциальности, затем «параметры центра конфиденциальности» (извините, но это перевод французской версии :-p), затем «файлы подтверждены» или что-то в этом роде.И добавьте в него файл, содержащий книгу Excel. И после этого сработало его окончательное решение.

Посмотрел везде и никогда не нашел такого решения.

Надеюсь, это кому-нибудь поможет

...