lunes, 1 de diciembre de 2014

VBA: OnAction o como asociar un procedimiento

Explicaré algo sobre la propiedad OnAction asociada al objeto Shapes.
...Tengo varias autoformas (casi 100) con un texto escrito en su interior (numeradas del 1 al 100) y me gustaría que al hace click en la autoforma correspondiente su texto apareciera en una casilla concreta de la hoja de excel en el texto es crito ene esta autoforma.
Ejemplo, la autoforma tiene el texto 023 al hace click en ella que en la casilla B19 se muestre el texto 023, pero que al hacer click en la autoforma 044 en la b19 muestre 044...


Lo primero que debemos saber es que .OnAction devuelve o establece el nombre de una macro que se ejecuta al hacer clic en el objeto especificado (justo lo que necesitaba el lector).

Generaremos dos sencillas macros en un módulo estándar de nuestro proyecto VBA.

Sub AsginarAccion()
'recorremos todos las autoformas
For i = 1 To Hoja1.Shapes.Count
    'y vamos añadiendo la acción de ejecutar la macro texto
    'al clicar sobre ellos
    Hoja1.Shapes(i).OnAction = "'texto " & i & "'"
Next i
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub texto(num As Long)
'selecciona la autoforma número 'num'
ActiveSheet.Shapes(num).Select
'llevamos a la celda A1 el texto de la autoforma
Range("A1").Value = Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text
End Sub



El primero sirve para asociar a todos nuestros objetos (Autoformas) la acción o macro solicitada...lo que ha quedado definido con la segunda macro llamada 'texto'.

El efecto final se puede ver en la imagen:

VBA: OnAction o como asociar un procedimiento

2 comentarios:

  1. Muy interesante,felicitaciones. Sino es mucho pedir, quizá puedas publicar otra aplicación de VBA Excel con Autoformas, no existe casi nada en la red al respecto. Gracias

    ResponderEliminar