Un lector de Chile me indica que, mediante el uso de la propiedad
OnAction,
no puede pasar procedimientos con argumentos. La entrada que dió origen a la consulta pueden visualizarla
aquí.
Resumiendo: el método OnAction nos permite asignar (desde VBA) una macro a ciertos objetos que tengamos en la hoja. La sintaxis es: Objeto.OnAction = "Macro1". Con esto nos aseguramos de que el procedimiento llamado "Macro1" se ejecute cada vez que se haga click sobre Objeto (que puede ser una Shape (autoforma), botón, etiqueta, etc, etc).
Repasando un poco.
Vimos como insertar una Shape (con la forma de la cara sonriente) y vincularle una macro:
Sub Macro1()
MsgBox "Hola"
End Sub
Sub InsertarShape()
ActiveSheet.Shapes.AddShape(msoShapeSmileyFace, 50, 50, 50, 50).Select
.OnAction = "Macro1"
End Sub
[+/-] Ver el resto / Ocultar
Si analizamos el código anterior, vemos que tengo un Sub que muestra un mensaje: "Hola". Y también tengo el Sub InsertarShape, que agrega una figura en la planilla y le asigna la "Macro1" a traves del método OnAction.
Hasta aquí todo bien. Pero mi estimado visitante, con razón, me indica que se le presentan problemas a la hora de pasar argumentos a la macro. Entonces desarrollaré un ejemplo muy sencillo que nos permitirá apreciar este planteamiento y aprender a realizar esta labor sin inconvenientes.
Pasos a seguir:
1) Creamos un Sub que, tomando dos argumentos, los sume y al resultado lo muestre en un MsgBox. Este Sub se llamará (muy originalmente) "Suma".
2) Insertaremos una Shape en la hoja y le asignaremos la macro Suma, pasando los dos argumentos requeridos en el procedimiento del punto 1.
3) Estaremos muy contentos de que esto funcione.
Y empezamos:
1)
Sub Suma(Valor1 As Double, Valor2 As Double)
'aqui va el mensaje con la suma de Valor1 + Valor2
MsgBox "La suma de " & Valor1 & " y " & Valor2 & " arroja el siguiente resultado" _
& vbCrLf & Valor1 + Valor2
End Sub
2)
Atención ahora, por que todo se resuelve con al correcta utilización de comillas y apóstrofes:
Sub InsertarShape()
'agrego la carita sonriente:
ActiveSheet.Shapes.AddShape(msoShapeSmileyFace, 50, 50, 50, 50).Select
'y le vinculo la macro del punto 1. noten la forma en la cual coloqué las comillas y el apóstrofe,
'siendo que cada argumento va separado por comas:
Selection.OnAction = "'Suma 2,2'"
End Sub
3)
Ya estamos contentos
perfecto.
En el código apreciamos que los argumentos son valores fijos (2), pero si necesitamos enviar variables, esta es la forma correcta de hacerlo:
Sub Suma2()
'doy valor a cada una de las variables
a = 3
b = 5
ActiveSheet.Shapes.AddShape(msoShapeSmileyFace, 50, 50, 50, 50).Select
'y las concateno en la llamada al sub
Selection.OnAction = "'Suma " & a & "," & b & "'"
End Sub
Bien estimado Francisco de
Chile, espero que te sea de utilidad.
Suerte.
Comentarios
Publicar un comentario