Автоматический запуск макроса VBA без окна сообщения - PullRequest
0 голосов
/ 09 июля 2020

У меня есть макрос Excel, который я хотел бы запускать автоматически при открытии файла. Единственный способ заставить это работать - это добавить msgbox перед вызовом моих подпрограмм. Однако для этого мне необходимо щелкнуть OK или закрыть поле для запуска макросов. Я пробовал использовать подпрограмму msgbox с синхронизацией, но это тоже не работает.

По какой-то причине msgbox появляется до того, как Excel полностью откроется, и в этот момент макрос застревает здесь (код для этого ниже). Отсюда я попытался дождаться открытия самого файла, пока он не перейдет в режим записи (Workbook.ReadOnly = false). Это тоже не сработало.

Public Sub msgBoxTimer()
    Const timeout = 2
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Popup "Measurement will begin shortly", timeout
End Sub
Private Sub Workbook_Open()
    Call msgBoxTimer
    Call init           ' initiate device
    Call updateIndex    ' collect & record measurements
End Sub

1 Ответ

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

Из вашего комментария я понял, что вы, вероятно, выполняете другие команды оболочки в init и updateIndex.

Что должно быть ясно, так это то, что когда вы выполняете команду Shell через объект Shell в VBA , поведение по умолчанию - не ждать завершения команды оболочки перед запуском следующей строки кода.

Если вы хотите, чтобы Excel дождался завершения команды оболочки перед продолжением, вы можете взглянуть на ответы на этот вопрос .

То есть, если вы хотите, чтобы Excel был полностью открыт перед запуском любых команд оболочки, вы можете использовать MsgBox, как вы изначально планировали, но он должен быть VBA MsgBox, который вы бы просто вызывали следующим образом:

MsgBox "Measurement will begin shortly"

Поток VBA будет ждать нажатия кнопки «ОК» перед продолжением выполнения.

...