Transcription
[Música] Hola a todos, ¿cómo están? Mi nombre es Sergio, desde su canal Excel e Info. Cuando desarrollamos macros en Excel, y realmente cuando desarrollamos en cualquier lenguaje, una función muy importante es la función MsgBox. Esta función nos permite mostrar cuadros de mensajes, ya sea informativos o con opción a tomar una decisión.
Aquí, por ejemplo, hay tres ejemplos de la función MsgBox. Aquí, este primer ejemplo es un ejemplo que yo uso mucho cuando desarrollo macros, y es que te permite elegir entre si deseas ejecutar algo o no lo deseas. Y es tan sencillo como tomar una simple decisión: ¿sí o no quieres ejecutar algo?
Igual, aquí contamos con otro ejemplo en donde se ponen los botones de aceptar o cancelar. Es similar a lo de sí o no. Si tú presionas aceptar, se ejecutará la macro que tú decidas. Si presionas cancelar, puede que no se ejecute ninguna macro o que se ejecute alguna acción.
Y también contamos con el ejemplo el cual tiene tres botones, y aquí dice: "¿Deseas continuar?". Hay opción a que sea que sí, a que sea no, o podemos darle una tercera opción que es cancelar. Y en nuestro ejemplo más común es simplemente cuando tenemos un mensaje y con un botón aceptar.
Entonces, aquí en este video voy a mostrarte la manera en la que podemos interactuar con esta función MsgBox, y tú puedes aplicarla a tus macros. Es importante entenderla, ya que siempre en las macros es importantísimo el tener una interacción con el usuario final y siempre dar opción a elegir un camino u otro. Vamos a verlo.
En este video, me voy a la ficha Programador, Visual Basic, y aquí está el Módulo 1 que yo inserté previamente. Bien, el primer paso va a ser crear una macro. Vamos a crear una macro que se llame simplemente "Sí y No", o la ponemos el nombre "SiNo". Esa va a ser el nombre de nuestra macro inicial. Y las macros que queremos aquí en este video, simplemente van a mostrar estos mensajes. Cuando tú las, simplemente, en tus proyectos tú vas a adecuarlo las macros que tú ya tengas o que vayas desarrollando.
Bien, vamos a mostrar primero el mensaje en donde tenga los botones sí y no. Inicialmente, vamos a declarar una variable que se llame "pregunta" y la vamos a declarar como tipo String o cadena de texto. A la variable "pregunta" vamos a asignarle la función MsgBox y así recoger el valor del botón que presionamos. Lo hacemos de la siguiente manera: le decimos, "pregunta es igual a MsgBox", abro paréntesis, ya que es una función, entre comillas voy a escribir "Deseas continuar", cierro comillas, coma, y aquí se despliegan una serie de opciones que yo puedo utilizar en mi cuadro de mensaje. Aquí, por ejemplo, vamos a utilizar la opción que dice "vbYesNo", esto es mostrar los botones de sí y no.
Ahora, si yo presiono la coma, el parámetro que me pide es el parámetro título. Yo tengo la opción de combinar botones con iconos que aparezcan en el cuadro de mensaje. Y eso, ¿cómo lo hacemos? Borro la coma, presiono o ingreso el signo de más, y me vuelven a aparecer las opciones, ya que voy a elegir "vbQuestion", es decir, el icono de pregunta. Ahora, si coma, y el título le voy a escribir "Excel e Info", cierro paréntesis y doy Enter.
La variable "pregunta" me va a guardar el valor de sí o el valor del botón no. Y ahora, ¿cómo aprovechamos lo que guarda la variable "pregunta"? Vamos a utilizar un If. Escribo "If" o sí, "pregunta es igual a vbNo", es decir, el botón no. "Then", aquí vamos a describirle. Y aquí estamos utilizando la función MsgBox. Sin embargo, como no estamos asignando lo a ninguna variable, no estamos guardando el valor de ese mensaje, entonces simplemente escribo "elegiste no". Ya que si el botón de no fue presionado, se va a mostrar ese mensaje. En todo caso, con un "Else", vamos a decirle "MsgBox elegiste sí", y el "If" lo cierro con "End If".
Y aquí yo estoy mostrando simplemente estos mensajes. Tú en tus prácticas o en tu trabajo vas a poner la macro o las macros que quieras que se ejecuten. Yo aquí simplemente te voy a mostrar una manera de que tus macros sean más dinámicas al permitirle al usuario final que tenga la opción de continuar o no, de ejecutar o no una macro. Y bien, esta macro vamos a ejecutarla. Damos clic aquí en este botón y se muestra el mensaje "¿Deseas continuar?". Dice que sí y no. Vemos que se muestra también el icono de pregunta. Damos clic en sí, y ahora me dice "elegiste sí". Doy clic en aceptar. Corro otra vez la macro, te digo que no, y me dice "elegiste no".
Bien, esta macro se puede hacer todavía más reducida. Vamos a crear otra macro que se llame "SiNo_v2", es decir, versión 2. Vamos a copiar estas dos líneas para reciclarlas, la misma variable "pregunta", pero ahora en esta macro nos va a guardar otra vez el valor de sí o no, dependiendo del botón que presionemos. Escribo "If pregunta es igual a vbNo Then". Y en la misma línea escribo "MsgBox elegiste no", cierro comillas, y para no abrir carne a la siguiente línea, pongo el carácter de dos puntos. Le digo "Exit Sub", es decir, si "pregunta es igual a no" o si presionamos el botón no, entonces se muestra este mensaje y después sale de la macro. Y aquí abajo le vamos a poner simplemente "MsgBox elegiste sí".
Y ahora ejecutamos. Ahora esta macro funciona exactamente igual. Te digo que sí, elegiste que sí. De nuevo, corro la macro, no, elegiste no. Funciona igual, simplemente usamos otro tipo de estructura con el If.
Y ahora creemos otra macro. A esta macro le vamos a poner "Sub", vamos a mostrar los botones aceptar, cancelar. Vamos a usar otra vez la misma variable que va a ser "pregunta", y ahora vamos a guardarla como tipo "Integer" o entero. Escribo "pregunta es igual a la función MsgBox", abro paréntesis, abro comillas "Deseas continuar", cierro comillas, coma. Ahora vamos a elegir "vbOKCancel", y no vamos a ponerle ningún icono, coma. Nos pide ahora el título, le ponemos "Excel e Info", cierro comillas, cierro paréntesis.
Ahora le vamos a decir "If", o sí, "pregunta es igual a vbCancel", y en la misma línea escribo "MsgBox elegiste cancelar", cierro comillas, y para continuar en la misma línea, recordemos, dos puntos, "Exit Sub". Y después "MsgBox elegiste aceptar".
Bien, aquí la función MsgBox nos va a mostrar los botones de OK y Cancelar, o de Aceptar y Cancelar. La variable "pregunta" a que la definimos como entero, ya que aquí la comparación dice "si pregunta es igual a 2", entonces. Y ese 2, ¿qué significa? Yo aquí tengo este archivo en donde vienen las constantes, que es el OK, el Cancel, el Abort, Retry, Ignore, Sí y No, y los valores que podemos utilizar son estos. Y estos números equivalen a esto. Yo puedo utilizar "vbOK" o "vbCancel", o puedo utilizar su número. Yo aquí el Cancel lo estoy definiendo como 2, que es este 2. Es por eso que le estoy diciendo "si pregunta es igual a 2", es decir, si se presionó Cancelar, entonces "elegiste cancelar". Si esta línea no se ejecuta, entonces "elegiste aceptar".
Corramos la macro. "¿Deseas continuar?". Aceptar. "Elegiste aceptar". Corramos la macro de nuevo. Cancelar. "Elegiste cancelar".
Y ahora vamos a crear una última macro en donde vamos a utilizar tres botones. Vamos a poner como nombre "SiNoCancelar". Copio estas dos líneas, vástago. Aquí hay que utilizamos dos botones, borro. Y ahora vamos a decirle "vbYesNoCancel", el signo de más, ya que quiero ponerle un icono al mensaje, y el icono que le vamos a poner es "vbInformation", que es un icono de información. En seguida vemos cuál es ese icono.
Aquí vamos a utilizar una estructura diferente a la que usamos aquí en estas macros. Vamos a utilizar la estructura "Select Case", ya que es más común cuando tenemos más de dos opciones. Veamos cómo lo usamos. Escribo "Select Case pregunta". Bien, el "Select Case" me va a permitir recuperar los valores de sí, no y cancelar y definirles una acción dependiendo del botón que presionemos. Y aquí con el "Select Case" ya estamos haciendo uso de lo que nos devuelva "pregunta". Entonces, aquí escribo "Case Is" o "en caso de que pregunta" sea "vbYes", es decir, el botón sí. Aquí vemos "vbYes" es el botón de sí, o "vbNo". En caso de que sea "vbYes", vamos a decirle "MsgBox presionaste sí". Bien, ahora decimos "Case Is" o "en caso de que sea vbNo", o de que pregunta sea igual a "vbNo". "vbNo" va a ser el botón no. En caso de que sea "vbNo", vamos a mostrar "presionaste no". Y si no presiona este sí y tampoco presiona este no, entonces le ponemos "Case Else", o en todo caso, vamos a mostrar un mensaje que diga "presionaste cancelar", y cerramos el selector con "End Select".
Bien, vamos a correr ahora esta macro. "¿Deseas continuar?". Vemos los tres botones, vemos el icono de información. Damos clic en sí, "presionaste sí". Corremos la macro otra vez, no, "presionaste no". Corremos la macro una última vez, cancelar, "presionaste cancelar".
Yo me despido esperando que este video te haya sido de utilidad y lo puedas aplicar a tus labores diarias. Sergio, si te gustó, por favor, dale manita arriba, compártelo con tus amigos y suscríbete a este canal si quieres aprender más de Excel, inteligencia de negocios y macros. Yo soy Sergio Alejandro Campos de Excel e Info. ¡Hasta la próxima!