Msgbox con respuesta automatica si no se obtiene respuesta de un usuario

Quiero solicitar ayudar con una cuestión que me acaba de surgir, tengo un archivo con varias macros y mi intención es que al abrirlo se inicien con una secuencia definida, sin embargo no siempre es necesario que se corra, se me ocurre algo así:

Sub prueba()
Respuesta = MsgBox("Quieres cancelar la ejecución del reporte", vbYesNo + vbQuestion, "Cancelar reporte")
tiempo = Application.Wait(Now + TimeValue("00:00:05"))
DoEvents
    If Respuesta = 6 Then
        Exit Sub
        Else
        If tiempo = 0 Then
            Respuesta = 7
            MsgBox "Listo"
        End If
    End If
End Sub

Pero no me funciona.

1 Respuesta

Respuesta
2

No entiendo para qué la variable de tiempo.

Puede ser así:

Sub prueba()
  Dim respuesta As VbMsgBoxResult
  respuesta = MsgBox("Quieres cancelar la ejecución del reporte", vbYesNo + vbQuestion, "Cancelar reporte")
  If respuesta = vbYes Then
    Exit Sub
  Else
    MsgBox "Inicia secuencia definida"
    'macro 1
    'macro 2
    'macro etc
  End If
End Sub

Que tal Dante gracias, la variable del tiempo en teoría es en caso que no se obtenga una respuesta en el tiempo definido por default continué con el proceso, y si se presiona "Yes" se cancele. Intenté esta otra opción pero tampoco me da resultado puesto que se ejecuta antes o después (dependiendo donde coloque los sendkeys) de presionar uno de los botones del msgbox:

Sub prueba()
Respuesta = MsgBox("Quieres cancelar la ejecución del reporte", vbYesNo + vbQuestion, "Cancelar reporte")
Application.Wait (Now + TimeValue("00:00:10"))
Call SendKeys("{TAB}", True)
Application.Wait (Now + TimeValue("00:00:01"))
Call SendKeys("~", True)
    If Respuesta = 6 Then
        Exit Sub
        ElseIf Respuesta = 7 Then
            MsgBox "Listo"
        'End If
    End If
DoEvents
End Sub

La variable del tiempo en teoría es en caso que no se obtenga una respuesta en el tiempo definido por default continué con el proceso

Es preferible que expliques desde un inicio qué necesitas. De esa manera te puedo entregar una solución completa.

[Re cuerda, nos estás pidiendo ayuda. Así que ayúdanos, brindando la información que necesitamos para hacerlo, incluso si esa información te parece "obvia", sólo es obvia para ti porque estás familiarizado con el objetivo general.


Considera lo siguiente.

Cambia el 5 por el número de segundos que quieres esperar.

Sub Procesar()
  Dim WshShell As Object
  Dim resp As VbMsgBoxResult
  '
  Set WshShell = CreateObject("WScript.Shell")
  '
  resp = WshShell.Popup("Quieres cancelar la ejecución del reporte", 5, "PROCESOS", vbYesNo + vbQuestion)
  Select Case resp
    Case vbYes        'SI
      Exit Sub
    Case vbNo, -1     'NO, o el mesaje se cerró por tiempo
      MsgBox "Inicia secuencia definida"
  End Select
End Sub

[Si te ayuda la respuesta, no olvides valorar.

Hola Dante, tal vez por andar tan deprisa se me paso ser más explicito, muchas gracias el código que me pasaste funciona bien cuando lo ejecuto manualmente, pero si lo pongo en el procedimiento Open del objeto Workbook:

Workbook_Open

Si bien aparece el mensaje cuando se inicia el libro pero no respeta el tiempo si no hay respuesta, saludos.

Funciona para mí si lo pongo el los eventos de ThisWorkbook:

Private Sub Workbook_Open()
  Dim WshShell As Object
  Dim resp As VbMsgBoxResult
  '
  Set WshShell = CreateObject("WScript.Shell")
  '
  resp = WshShell.Popup("Quieres cancelar la ejecución del reporte", 5, "PROCESOS", vbYesNo + vbQuestion)
  Select Case resp
    Case vbYes        'SI
      Exit Sub
    Case vbNo, -1     'NO, o el mesaje se cerró por tiempo
      MsgBox "Inicia secuencia definida"
  End Select
End Sub

Muchas gracias Dante, por tomarte tiempo para ayudar, tal vez falta configurar algo en mi excel al poner la macro en un libro nuevo siempre se queda así no importa el tiempo que pase:

Qué versión de excel tienes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas