Msgbox не закрывается, когда WSH.Popup ожидает определенное время - PullRequest
0 голосов
/ 31 мая 2019

У меня есть файл Excel, который автоматически открывается с помощью планировщика Windows. Также у меня есть подпрограмма Auto_Open для немедленного запуска макроса. Чтобы избежать того, что каждый раз, когда он открывается, он начинает работать без возможности его изменить, я установил msgbox, который позволяет мне выбирать, работает макрос или нет. Однако я хочу, чтобы Excel автоматически выбрал «Да» по прошествии 10 секунд, и я не могу его получить. Это мой код:

Я пытался поместить секунды напрямую без переменной, я также пробовал Case -1 в одиночку, но ничего не работает.

Sub Auto_Open()

Set WSH = CreateObject("WScript.Shell")
'cTime = 10 
BtnCode = WSH.Popup("¿Desea generar la consulta de vacaciones?", cTime, "Consulta", vbYesNo)

Select Case BtnCode
    Case vbYes
    Call consulta

    Case vbNo

    Case 1, -1
    Call consulta

    End Select

End Sub

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Для этого может быть проще использовать пользовательскую форму в сочетании с модулем. UserForm необходимо заменить все, что вы делаете с Msgbox. Код, который вам нужен, будет выглядеть примерно так:

USERFORM clode

Private Sub CommandButton2_Click()

'Run code for yes

'then
Unload Me

End Sub

Private Sub CommandButton1_Click()
'run code for "no".

'then
Unload Me

End Sub


Private Sub UserForm_Activate()

Application.OnTime Now + TimeValue("00:00:10"), "KeepItGoing"

End Sub

Тогда вы можете настроить его взаимодействие с внешним модулем:

Sub launchSOMETHING()
'Run this first

UserForm1.Show

End Sub


Sub KeepItGoing()

If UserForm1.Visible = True Then
    MsgBox "BOOOOMO"
    Unload UserForm1


End If


End Sub

Вы можете увидеть пример в этом файле здесь.

ОБНОВЛЕНО: Похоже, что все макросы будут приостановлены, пока Msgbox открыт. В приведенных ниже двух процедурах вы заметите, что вторая процедура не будет запущена до тех пор, пока не будет закрыта коробка, даже если она должна была выполняться через 5 секунд.

Sub TestWhatMsgBoxDoes()

Application.OnTime Now + TimeValue("00:00:5"), "someOtherMacro"
MsgBox "Everything is on hold?"



End Sub


Sub someOtherMacro()
Application.StatusBar = "The Second Macro has run at" & Now()


End Sub
0 голосов
/ 04 июня 2019

Хорошо, так что после многих исследований мне удалось сделать то, что я хочу, без особых проблем.Сначала я создал скрипт (файл .vbs), который содержит следующее:

Dim objExcel
Dim objWB

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWB = objExcel.Workbooks.Open("R:path\file.xlsm")
objExcel.Run "MyMacroName"
objWB.Save
objWB.Close False
objExcel.Quit

Теперь каждый раз, когда я запускаю скрипт, макрос запускается автоматически.Я также настроил событие планировщика Windows, чтобы оно само запускалось со сценарием.Таким образом, мне не нужно всплывающее окно, чтобы спросить меня, хочу ли я что-то запустить, и сценарий будет запускаться только тогда, когда событие запускается установленными условиями.

С другой стороны, ExcelСам файл свободен от автозапуска при открытии книги, поэтому любой пользователь может изменить его без проблем.

Спасибо людям, которые помогли мне в этом.

0 голосов
/ 31 мая 2019

Я думаю, что это связано с процедурой "Вызовите консультанта", попробуйте использовать megbox для проверки.

...