Hoy veremos un método de VBA Excel que nos permite controlar el tiempo de exposición de un MsgBox, veremos el método .PopUp.
Este método tiene la siguiente sintaxis:
objeto.PopUp: .Popup(Texto,[Tiempo en segundos],[Titulo MsgBox],[Tipo])
Siendo relevantes las posibles constantes a emplear en el cuarto parámetro: Tipo.
Desde este controlamos el aspecto del cuadro diálogo. Veamos cuales son las constantes a nuestra disposición.
Nota: Son similares a las que podemos emplear directamente en un MsgBox, pero con alguna adicional.
En este primer cuadro describimos el número y tipo de botones a mostrar en el cuadro de diálogo:
Para describir el estilo del icono.
El tercer grupo determina qué botón es el valor predeterminado.
El cuarto grupo determina la modalidad del cuadro de mensaje.
Y el quinto grupo especifica si el cuadro de mensaje es la ventana de primer plano, junto con la alineación y la dirección del texto.
Recordemos que a la hora de sumar números para crear el valor final del argumento Tipo (cuarto argumento del método .PopUp) , se debe utilizar únicamente un número de cada grupo!!!.
Para mostrar un ejemplo práctico, insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:
Para poder trabajar con las posibles respuestas tendremos presente el siguiente cuadro de valores de respuesta del método:
En el ejemplo observamos tres ejemplos del método .PopUp, aplicando un retardo de dos segundos entre cada MsgBox, y mostrando diferentes combinaciones de botones, iconos o estilos...
Notemos que la cuestión temporal en VBA es siempre muy aproximada y que dependiendo de los procesos abiertos en nuestro equipo, el tiempo estipulado será más o menos preciso (normalmente 'menos').
Este método tiene la siguiente sintaxis:
objeto.PopUp: .Popup(Texto,[Tiempo en segundos],[Titulo MsgBox],[Tipo])
Siendo relevantes las posibles constantes a emplear en el cuarto parámetro: Tipo.
Desde este controlamos el aspecto del cuadro diálogo. Veamos cuales son las constantes a nuestra disposición.
Nota: Son similares a las que podemos emplear directamente en un MsgBox, pero con alguna adicional.
En este primer cuadro describimos el número y tipo de botones a mostrar en el cuadro de diálogo:
Miembro | Valor | Valor Hexadecimal | Descripción |
---|---|---|---|
OKOnly | 0 | 0x0 | Muestra sólo el botón Aceptar. |
OKCancel | 1 | 0x1 | Muestra los botones Aceptar y Cancelar. |
AbortRetryIgnore | 2 | 0x2 | Muestra los botones Anular, Reintentar y Omitir. |
YesNoCancel | 3 | 0x3 | Muestra los botones Sí, No y Cancelar. |
YesNo | 4 | 0x4 | Muestra los botones Sí y No. |
RetryCancel | 5 | 0x5 | Muestra los botones Reintentar y Cancelar. |
6 | 0x6 | Muestra los botones Reintentar, Cancelar y Continuar. |
Para describir el estilo del icono.
Miembro | Valor | Valor Hexadecimal | Descripción |
---|---|---|---|
Critical | 16 | 0x10 | Muestra el icono Mensaje crítico. |
Question | 32 | 0x20 | Muestra el icono Consulta de advertencia. |
Exclamation | 48 | 0x30 | Muestra el icono Mensaje de advertencia. |
Information | 64 | 0x40 | Muestra el icono Mensaje de información. |
El tercer grupo determina qué botón es el valor predeterminado.
Miembro | Valor | Valor Hexadecimal | Descripción |
---|---|---|---|
DefaultButton1 | 0 | 0x000 | El primer botón es el predeterminado. |
DefaultButton2 | 256 | 0x100 | El segundo botón es el predeterminado. |
DefaultButton3 | 512 | 0x200 | El tercer botón es el predeterminado. |
DefaultButton4 | 768 | 0x300 | El cuarto botón es el predeterminado. |
El cuarto grupo determina la modalidad del cuadro de mensaje.
Miembro | Valor | Valor Hexadecimal | Descripción |
---|---|---|---|
ApplicationModal | 0 | 0x0000 | Aplicación modal: el usuario debe responder al cuadro de mensaje antes de continuar trabajando en la aplicación actual. |
SystemModal | 4096 | 0x1000 | Sistema modal: se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensaje. |
Y el quinto grupo especifica si el cuadro de mensaje es la ventana de primer plano, junto con la alineación y la dirección del texto.
Miembro | Valor | Valor Hexadecimal | Descripción |
---|---|---|---|
VbMsgBoxHelpButton | 16384 | 0x4000 | Agrega el botón Ayuda al cuadro de mensaje. |
MsgBoxSetForeground | 65536 | 0x10000 | Especifica la ventana del cuadro de mensaje como ventana de primer plano. |
MsgBoxRight | 524288 | 0x80000 | Texto alineado a la derecha. |
MsgBoxRtlReading | 1048576 | 0x100000 | Especifica que el texto debe aparecer para ser leído de derecha a izquierda en los sistemas árabe y hebreo. |
Recordemos que a la hora de sumar números para crear el valor final del argumento Tipo (cuarto argumento del método .PopUp) , se debe utilizar únicamente un número de cada grupo!!!.
Para mostrar un ejemplo práctico, insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:
Option Explicit Const Tempus = 2 'Segundos Sub MsgBox_con_Temporizador() Dim objShell As Object Dim respuesta1 As Integer, respuesta2 As Integer, respuesta3 As Integer Set objShell = CreateObject("WScript.Shell") 'Sintáxis Método PopUp: .Popup(Texto,[Tiempo en segundos],[Titulo MsgBox],[Tipo Botón]) respuesta1 = objShell.Popup("Mensaje 1 Retrasado en 2 Segundos.", Tempus, "excelforo.com", 6 + vbQuestion) respuesta2 = objShell.Popup("Mensaje 2 Retrasado en 2 Segundos.", Tempus, "excelforo.com", vbYesNo + vbExclamation) respuesta3 = objShell.Popup("Mensaje 3 Retrasado en 2 Segundos.", Tempus, "excelforo.com", vbRetryCancel + vbInformation) Set objShell = Nothing End Sub
Para poder trabajar con las posibles respuestas tendremos presente el siguiente cuadro de valores de respuesta del método:
Miembro | Valor decimal | Descripción |
---|---|---|
-1 | Valor cuando el usuario no hace clic en ningún botón después de transcurridos los N segundos. | |
vbOK | 1 | Aceptar |
vbCancel | 2 | Cancelar |
vbAbort | 3 | Anular |
vbRetry | 4 | Reintentar |
vbIgnore | 5 | Ignorar |
vbYes | 6 | Sí |
vbNo | 7 | No |
11 | Continuar |
En el ejemplo observamos tres ejemplos del método .PopUp, aplicando un retardo de dos segundos entre cada MsgBox, y mostrando diferentes combinaciones de botones, iconos o estilos...
Notemos que la cuestión temporal en VBA es siempre muy aproximada y que dependiendo de los procesos abiertos en nuestro equipo, el tiempo estipulado será más o menos preciso (normalmente 'menos').
Muy bueno, gracias por compartir.
ResponderEliminarMuy bueno. Muchas gracias.
ResponderEliminarMe han venido muy bien para un programa mío pero a veces pasa el tiempo y no se cierra. ¿Se podría solucionar esto?
Gracias
Hola Sara,
Eliminarno, solo tienes el controlador que se indica...
a veces puede ocurrir que el equipo esté empleando sus recursos en otros procesos y eso de la sensación de bloqueo.
:'(
Saludos
Muchas gracias por contestar ¡ y tan rápido!. No llego a saber porqué se queda la ventana sin cerrar, solo pasa en algunas ocasiones. He metido un DoEvents antes del popup y parece que funciona.
ResponderEliminarGracias de nuevo
Fantástico!
Eliminargracias por compartir tu solución
Slds
GENIALES
ResponderEliminar