Asignar macro que se encuentra en un módulo del libro a un botón ActiveX en Excel

Quisiera saber si es posible que a un botón ActiveX se le pueda asignar una macro en un módulo del libro de trabajo en excel, es decir, los controles ActiveX me permiten incluir un comando en el elemento "Hoja" en donde se crea, podría usar una linea de invocación de una macro que se encuentre en un módulo y funcionaría bien (ej. Call mimacro), sin embargo, no es eso lo que deseo, debo hacer cien botones con la misma macro, y no quisiera hacer una macro por cada botón sino asignar directamente la macro que se encuentra en el "Módulo1" como se hace con los botones de formulario, la diferencia es que mi principal intención es colocar una imágen al botón y ésto no lo puedo hacer en botones de tipo "Control de Formulario" o si?

1 Respuesta

Respuesta
1

H o l a:

Se tienen que cargar todos los commandbutton a una Clase

Primero, crea la Clase1,

Instrucciones para crear una clase

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo de clase
  4. En el panel del lado derecho copia la macro
Option Explicit
Public WithEvents tbxCustom1 As MSForms.CommandButton
'
Private Sub tbxCustom1_Click()
'Por.Dante Amor
    Call macrounica
End Sub
'
Private Sub Class_Terminate()
'Por.Dante Amor
    Set tbxCustom1 = Nothing
End Sub

Cambia macrounica por el nombre de tu macro que está en el módulo


Ahora hay que cargar todos los commandbutton de todas las hojas a la clase.

Pon el siguiente código en los eventos de thisworkbook, de esa forma cuando abras el libro, se cargarán los commandbutton:

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. Del lado derecho copia la macro
Dim colTbxs As Collection 'Collection Of Custom Textboxes
'
Private Sub Workbook_Open()
'Por.Dante Amor
    Dim ctlLoop
    Dim clsObject As Clase1
    Set colTbxs = New Collection
    For Each h In Sheets
        For Each ctlLoop In h.OLEObjects
            If TypeOf ctlLoop.Object Is MSForms.CommandButton Then
                Set clsObject = New Clase1
                Set clsObject.tbxCustom1 = ctlLoop.Object
                colTbxs.Add clsObject
            End If
        Next
    Next
End Sub

En un módulo debes tener la macro, ejemplo:

Sub macrounica()
'Por.Dante Amor
    MsgBox "Estoy en la macro del módulo"
End Sub

Ejecuta el evento Workbook_Open, o guarda, cierra y abre nuevamente el archivo para que se ejecute el evento.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas