Excel не открывается полностью при запуске макроса в Workbook_Open - PullRequest
0 голосов
/ 13 июля 2020

Я написал макрос, который я хочу запускать непосредственно при открытии книги. Это работает, однако макрос запускается до того, как настоящая электронная таблица полностью откроется, и я вижу только Excel spla sh все время, пока работает макрос.

Я должен упомянуть, что я открываю книгу через Windows Диспетчер задач. После открытия файла макрос go через al oop и открытие списка других файлов Excel, которые обновляют внешние данные с помощью подключаемого модуля SAP Analysis.

Я вызываю электронную таблицу с макросом как запланированная задача для обновления данных с последующим автоматическим закрытием:

Private Sub Workbook_Open()
    If Range("start_on_open").value = "YES" Then
        Call Process_action_table
    End If
End Sub

start_open - это именованный диапазон на моем листе, и когда я устанавливаю его на «ДА», макрос запускается автоматически.

Пока функция «Process_action_table» работает, я отображаю информацию о состоянии в электронной таблице, но, конечно, когда виден только экран spla sh, на самом деле ничего не отображается.

Когда я запускаю макрос "вручную" все работает нормально. Мне кажется, что это как-то так, будто времени обработки не хватило, чтобы правильно открыть электронную таблицу.

Я добавил следующий код в начале, но безрезультатно:

t_end = Now + TimeValue("0:0:10")
Do While Now < t_end
    DoEvents
Loop

Мы будем очень благодарны за любые предложения.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Я не пробовал этот код. Пожалуйста, оставьте отзыв, хорошо он или нет. Он будет зацикливаться / ждать, пока книга станет доступной для записи.

Private Sub Workbook_Open()
Dim wb As Workbook
Set wb = ThisWorkbook
    If Range("start_on_open").value = "YES" Then
        'wait for workbook to writeable
        Do Until wb.ReadOnly = False
            Application.Wait Now + TimeValue("00:00:01")
        Loop
        Call Process_action_table
    End If
End Sub
0 голосов
/ 13 июля 2020

дайвингТоби. Если загрузка рабочего листа является обязательным условием, вместо использования Workbook_Open() подходит использование Worksheet_Activate(). Попробуйте вставить этот код на лист, который содержит диапазон start_on_open:

Private Sub Worksheet_Activate()
    If Range("start_on_open").value = "YES" Then
        Call Process_action_table
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...