События VBA: загрузка рабочей книги перед запуском кода с использованием workbook_open - PullRequest
2 голосов
/ 18 октября 2010

Я хочу запустить макрос VBA ПОСЛЕ закрытия книги.Я пытался использовать workbook_open, но он запускается до того, как книга открылась.Это не работает для меня, так как мне нужно циклически проходить каждый лист следующим образом ...

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
'do stuff on each sheet
Next ws

End Sub

Кто-нибудь знает, есть ли событие, которое запускается после того, как книга закончилась открываться?Или есть какие-то другие предложения о том, как мне этого добиться?

Ответы [ 3 ]

7 голосов
/ 30 июля 2014

У меня была похожая проблема, которую я решил с помощью Application.OnTime .

Из связанной статьи библиотеки MSDN:

Запланирует процедуру для запускав указанное время в будущем (либо в определенное время суток, либо по прошествии определенного количества времени).

Вы можете попробовать использовать этот метод, чтобы предоставить рабочей книге достаточно времени для открытия.перед запуском процедуры DoStuff:

Private Sub Workbook_Open()

    Application.OnTime Now + TimeValue("00:00:01"), "DoStuff"

End Sub

Убедитесь, что процедура DoStuff отсутствует в модуле рабочего листа:

Private Sub DoStuff()
    'Implementation...
End Sub

Время можно отрегулировать, но одна секунда была удовлетворительной дляя.

6 голосов
/ 18 октября 2010

Поместите свой код в событие Workbook_Activate. Это происходит после события Open.

Private Sub Workbook_Activate()
    ' Code goes here
End Sub
1 голос
/ 18 октября 2010

Попробуйте использовать ThisWorkbook вместо ActiveWorkbook:

Private Sub Workbook_Open()
    Dim osht As Worksheet
    For Each osht In ThisWorkbook.Worksheets
        Debug.Print osht.Name
    Next osht
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...