Check the new version here

Popular channels

Asignar Macro con Parámetros

Tras mucho buscar en internet como asignar macros con parámetros a un Shape para usarlo como botón y no encontrar nada.
Por lo menos nada que no involucre crear una clase y generar un Array de controles, se me ocurrió una alternativa.
Tal vez no es la más elegante en cuanto a formato pero resulta a la perfección y es muy simple.
Hasta el momento tenía una planilla con varios Shapes que oficiaban de botones los cuales cargaban un formulario, dependiendo del botón eran los datos que se iban a mostrar.
Pero esto me obligaba a tener varios procedimientos, tantos como botones tenga en la planilla ya que no había forma de identificar sobre cual se hace click.
 
En fin manos a la obra
 
Vamos a dar formato a las celdas que oficiarán de botones en nuestra planilla, luego vamos a la pestaña “Datos” y seleccionamos “Validaciónde datos”





 
En la pestaña mensajede entrada escribimos los valores que vamos a recuperar como parámetros para usar en nuestra macro.
En este caso muestro 4 opciones pero con solo una se podría ingresar un array de parámetros

Las entradas van a ser:    
                Mensaje de entrada / Título
                Mensaje de entrada / Mensaje
                Mensaje de error / Título
                Mensaje de error / Mensaje
 


Para que no nos esté mostrando los valores cada vez que seleccionamos la celda, desmarcamos la opción “Mostrar mensaje…”




Luego insertamos un hipervínculo en la celda y le asignamos como referencia el mismo rango de la celda para que no nos mueva la selección 








Una vez finalizado vamos al diseñador Visual Basic (ALT +F11)
Doble Click en la Hoja en la que estamos trabajando
Seleccionamos el objeto Worksheet y el procedimiento FollowHyperlink







Luego escribimos el siguiente código


Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    On Error Resume Next
    Hoja1.Range("I5" ) = Range(Target.SubAddress).Validation.InputTitle
    Hoja1.Range("I6" ) = Range(Target.SubAddress).Validation.InputMessage
    Hoja1.Range("I7" ) = Range(Target.SubAddress).Validation.ErrorTitle
    Hoja1.Range("I8" ) = Range(Target.SubAddress).Validation.ErrorMessage
End Sub



Para que sea más adaptable se le pueden asignar nombres a los rangos

Finalmente al seleccionar las celdas con el ratón verán que estamos utilizando como parámetros las validaciones que le asignamos a cada una
 





Espero les sea de utilidad, todos los comentarios para mejorar serán bien recibidos
0No comments yet