Cerrar automáticamente mensaje EXCEL

He creado un mensaje de alerta y necesitaría que, si transcurridos 10 segundos no se ha hecho click en Aceptar o Cancelar, se cierre el mensaje y se ejecute una macro.
La opción Cancelar también ejecuta dicha macro, por lo que si se activara el botón Cancelar automáticamente también me serviría.
La cuestión es que tiene que ser automático porque se trata de una tarea programada que se ejecuta al abrir el libro, y tendría que funcionar en el caso de que no haya nadie delante para apretar el botón.
1

1 Respuesta

18.925 pts. DESARROLLO DE SISTEMAS A MEDIDA EN EXCEL - Analista...
[email protected] : para eso tienes que utilizar el método WAIT y la función NOW
wait Now + timevalue("00:00:10")
Espero que te halla sido de ayuda, por cualquier consulta quedo a las ordenes.
Saludos, y no te olvides de finalizar y evaluar la respuesta.
Hola,
Gracias por tu ayuda, pero el problema es que el wait no se ejecuta hasta que se ha apretado un botón del mensaje o éste se ha cerrado.
Es decir, aparece el mensaje y hasta que no se hace click en "Aceptar", "Cancelar" o se cierra no empieza a contar los 10 segundos. ¿Cómo lo hago para que el tiempo cuente a la vez que aparece el mensaje, y que una vez transcurrido desaparezca el mensaje y se ejecute la macro autómaticamente?
Aquí está el código:
Private Sub Workbook_Open()
AvisoEditar = MsgBox(" ¿EDITAR?" & Chr(10) & "- En caso afirmativo, elija Aceptar" & Chr(10) & "- Si desea ejecutar la macro, presione Cancelar", vbOKCancel + vbInformation, "Aviso")
If AvisoEditar = vbCancel Then Macro1
Application.Wait (Now + TimeValue("00:00:10"))
Macro1
End Sub
He probado de poner el wait antes pero pasa lo mismo, el tiempo no transcurre a la vez que el mensaje, y hasta que el mensaje no se cierra (o se le apretá un botón) manualmente no se ejecuta la macro.
Muchas gracias!
Tienes razón, lamentablemente no se personalmente com hacerlo (y creo 90% que no se puede) había pensado usar un form en lugar del msgbox y poner la instrucción wait en el activate del mismo (y haciendo un show en el open del libro), pero seguimos con el mismo problema, hace el wait pero no libera los botones hasta que termina de contar.
Así que lo siento,
Saludos y si encuentras la solución te agradezco que me la comentes. Gracias!
Ok. Lo que se me ocurre es que en lugar de usar un MsgBox uses un form
para eso inserta un UserForm y agregale dos commandbuton (b_aceptar y b_cancelar)
En el evento Activate del userform colocas la linea del wait
y en el Open del libro : userform1. show
Esto hará que cuando abra el libro muestre el form y cuente 10 segundos antes
Pues si, definitivamente la solución es hacer un formulario en vez de un MsgBox!
He creado un UserForm con los botones Aceptar y Cancelar, con la misma apariencia que tenía el MsgBox, aunque finalmente en vez del wait he puesto un temporizador, quizá me he complicado la vida pero resulta.
El código quedaría así:
'en ThisWorkbook
Private Sub Workbook_Open()
StartTemporizador
Aviso.Show
End Sub
----------------------------------------------------------------------------------------------------------
'En el formulario "Aviso"
Private Sub CommandButton1_Click()
StopTemporizador
Unload Aviso
Windows("pendientes_imputaciones2.xls").Activate
End Sub
Private Sub CommandButton2_Click()
Unload Aviso
Macro1
End Sub
-----------------------------------------------------------------------------------
'En el módulo donde está el código del temporizador
'Temporitzador
Public datHora As Date
Public Const conIntervalo = 8
Public Const conRunMacro = "Tu_Sub" 'tu proced.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
If Aviso Is Nothing Then
Windows("pendientes_imputaciones2.xls").Activate
StopTemporizador
Else
Unload Aviso
Macro1
End If
End Sub
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Gracias por todo! Buena respuesta y rapidez :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas