Como Asignar macro con argumentos a un botón de Control de formulario

Índice
  1. El ejemplo
  • Configurando el código VBA
  • Ejecutar una macro con argumentos
    1. Pasar números como argumentos
    2. Asignar una macro de otro libro de trabajo
  • Ejecutar una macro con argumentos basados ​​en un valor de celda
  • Resumiendo todo
  • Uno de los métodos más populares para ejecutar una macro es tener un botón en la parte frontal de la hoja de trabajo. Estos son bastante simples de crear con los controles de formulario básicos que se encuentran en la cinta de desarrollador, lo que los convierte en una opción popular.

    Pero, ¿qué pasaría si tuvieras muchos botones y todos hicieran algo similar, salvo algunas variables, argumentos o parámetros diferentes? Una opción es escribir código separado para cada botón, o una segunda opción tal vez una declaración If grande para manejar la lógica de todos los botones. Pero por favor no hagas ninguna de esas cosas, sería una locura.

    Para pasar un argumento a una macro solo se requiere la sintaxis correcta al asignar la macro al botón.

    El ejemplo

    Para demostrar cómo funciona esto, aquí está nuestro escenario de ejemplo. Hay dos cuadros de lista, cada uno de los cuales contiene una lista, con un botón debajo de cada uno. Cada vez que se hace clic en el botón, el recuento de elementos en el cuadro de lista de arriba se muestra en un cuadro de mensaje.

    Escenario de ejemplo

    Consideremos cómo podemos lograr esto de la manera más eficiente posible.

    Configurando el código VBA

    Asumiré que ya sabes cómo crear un botón y asignarle una macro.

    Si hubiéramos creado un código separado para cada botón, entonces el código VBA para hacer clic en el botón debajo de lstBox1 sería el siguiente:

    Sub lstBoxCount()Dim ws As WorksheetDim lstBoxName As StringDim lstBox As ListBoxSet ws = Sheets("Sheet1")lstBoxName = "lstBox1"Set lstBox = ws.ListBoxes(lstBoxName)MsgBox lstBox.ListCountEnd Sub

    Si observa, el nombre de la hoja y el nombre del cuadro de lista están codificados en la macro, por lo tanto, necesitaríamos una macro para cada botón. Ahora imagina que tenemos 30 cuadros de lista y 30 botones… ¡eso requeriría 30 macros! Mala idea.

    Aquí es donde los argumentos son útiles. Podemos pasar el nombre de la hoja de trabajo y el nombre del cuadro de lista a la macro como argumentos; al hacer esto, podemos usar una sola pieza de código VBA.

    Sub lstBoxCount(wsName As String, lstBoxName As String)Dim ws As WorksheetDim lstBox As ListBoxSet ws = Sheets(wsName)Set lstBox = ws.ListBoxes(lstBoxName)MsgBox lstBox.ListCountEnd Sub

    El código anterior se puede utilizar con cualquier ListBox. No hay variables codificadas dentro del código; se pasan al código cuando se llama.

    Ejecutar una macro con argumentos

    Habiendo creado una macro con argumentos en la sección anterior, surgen algunos problemas nuevos al asignarla a un botón.

    1. La macro no aparece en la lista de macros disponibles. Aún podemos usar la macro, pero tenemos que saber su nombre.
    2. Necesitamos conocer la sintaxis correcta para pasar los argumentos a la macro.

    Podemos manejar ambos problemas; no es gran cosa.

    La sintaxis requerida para llamar a una macro desde el mismo libro es:

    'NombreDeMacro "variable1", "variable2"'

    Tome nota de dónde están las comillas simples, las comillas dobles, las comas y los espacios. No hay nada que nos ayude a completar esto, aparte de un mensaje de error para burlarse de nosotros cuando nos equivocamos.

    Asignar macro con mensaje de error de arumentos

    Para llamar a nuestra macro lstBoxCount desde arriba, el texto en la ventana Asignar macro sería:

    'lstBoxCount "Hoja1", "ListBox1"'

    Asignar macro con argumentos - entrada

    Donde Hoja1 es el nombre de la hoja de trabajo y ListBox1 es el nombre del primer ListBox.

    Se podría llamar a la misma macro desde el segundo botón, pero los argumentos serían diferentes. Observe que el nombre del cuadro de lista ha cambiado debajo.

    'lstBoxCount "Hoja1", "ListBox2"'

    Ahora podemos usar el mismo código VBA sin importar cuántos cuadros de lista haya o en qué hojas de trabajo se encuentren. Simplemente cambiamos los valores en los argumentos.

    Pasar números como argumentos

    Si pasa un número como argumento, no lo escriba entre comillas dobles.

    'NombreDeMacro "textInQuotes", 1000'

    Asignar una macro de otro libro de trabajo

    Al regresar a la ventana Asignar macro, notará que Excel ha agregado el nombre del libro en el cuadro Nombre de la macro.

    Asignar macro con argumentos: entrada a un libro de trabajo diferente

    'Nombre del libro de trabajo.xlsm'!'lstBoxCount "Hoja1", "lstBox1"'

    Al principio esto puede parecer molesto. Pero Excel nos está ayudando aquí, ya que ahora muestra la sintaxis necesaria para llamar a una macro desde otro libro.

    'Nombre de la hoja de trabajo.xlsm'!'NombreDeMacro "variable1", "variable2"'

    Ejecutar una macro con argumentos basados ​​en un valor de celda

    Hasta ahora hemos asumido que conocemos los argumentos al crear los botones. Puede que ese no sea el caso; tal vez el argumento se base en el valor de una celda. Pero eso también está bien; Podemos pasar dinámicamente un valor de celda a la macro en el momento en que se hace clic en el botón asignando una macro usando la siguiente sintaxis.

    'NombreDeMacro "variable1", EVALUAR("A1")'

    El ejemplo anterior supone que el argumento está contenido en la celda A1. Una vez más, tome nota de dónde están las comillas simples y dobles.

    Usando nuestro ejemplo específico. Supongamos que el nombre del cuadro de lista está contenido en la celda B2:

    'lstBoxCount "Hoja1", EVALUAR("B2")'

    Asignar macro con argumentos - desde hoja de cálculo

    ¡Esto también funcionará! Genial, ¿eh?

    Resumiendo todo

    Con suerte, verá que esto es muy poderoso y poder establecer argumentos basados ​​en el valor de una celda es simplemente asombroso. Ya no necesitas muchos botones. En cambio, un cuadro desplegable y un botón podrían ser suficientes.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...