Раньше у меня был простой ответ на этот вопрос: используйте объект Windows Scripting Shell, который имеет функцию «Popup» - окно сообщений, как и функцию VBA MsgBox (), с параметром SecondsToWait, который обеспечивает точно время ожидания, которое вы хотели.
With CreateObject("Scripting.WsShell")
.Popup "Watch me disappear in 5 seconds", 5, Application.Name & ": test", vbInformation + vbOkCancel
End With
Если вы включите кнопку «Отмена», она может по-прежнему работать: доступны следующие параметры: vbOkCancel, vbYesNoCancel и vbRetryCancel.
Если вы пытаетесь закрыть диалоговое окно, которое вы не открыли своим собственным вызовом функции msgBox (), это бесполезно: и, как я уже говорил, параметр SecondsToWait на самом деле не работает, дни - кому-то в Редмонде действительно не нравится идея, что один поток закрывает полезные предупреждения другого потока и важные прерывания рабочего процесса пользователя.
Однако вы можете запустить отложенную команду «Закрыть» окна сообщений, используя функцию API Timer () - не совсем 'закрыть текущий открытый MsgBox' , так как для этого требуется предварительное предупреждение о том, что вы намеревались открыть это - но это самое близкое, что у меня есть, оно вписывается в автономный модуль VBA, и Я отправил код в ответ на очень похожий вопрос StackOverflow к вашему .
Я должен предупредить вас, что в данном ответе используется кувалда, чтобы расколоть гайку, с подробным объяснением в боковом порядке.