jueves, 2 de marzo de 2017

VBA: Una Macro para crear otras Macros

Buscando respuesta para un cliente me vi en la necesidad de generar un código de manera automática en un segundo libro de trabajo, para que a su vez se ejecutara de manera independiente...
Dudé al principio de que tal cosa fuera posible, pero investigando, encontré una explicación de Chip Pearson que solucionaba mi problema.

Y esto es lo que veremos hoy, cómo es posible crear una macro en Excel que a su vez cree un segunda macro en cualquier otro libro..


Lo más importante de este código, y antes de empezar, es que debemos activar la librería:
Microsoft Visual Basic for Applications Extensibility 5.3
A localizar entre las referencias del Editor de VB:

VBA: Una Macro para crear otras Macros



Esta librería (VBIDE) es fundamental para nuestro propósito, ya que nos proporciona todos los objetos y valores para construir nuestros Proyectos de VB dentro de nuestro Editor de VB.

Nuestra macro la creamos en un módulo estándar de nuestro libro de trabajo.
En el ejemplo, la macro la crearemos en nuestro mismo libro... pero recuerda que es posible trabajar sobre un segundo libro...
El código:

Sub Macro_crea_Macro()
'ACTIVAR REFERENCIA !!!
'Microsoft Visual Basic for Applications Extensibility 5.3

Dim TxtMacro As String
'Escribimos el código de la macro nueva que generará esta...
TxtMacro = "'Esta macro ha sido creada por otra macro" & Chr(13) & _
            "Sub MacroNueva()" & Chr(13) & _
            "MsgBox ""Macro Nueva generada con éxito!!""" & Chr(13) & _
            "End Sub"

Dim VBComps As VBComponents
Set VBComps = ThisWorkbook.VBProject.VBComponents
'en este ejemplo trabajamos sobre Este libro de trabajo,
'pero pdríamos crear la Nueva Macro en cualquier otro libro... !!

Dim VBComp As VBComponent
Dim VBCodeMod As CodeModule

'Aquí creamos un nuevo módulo estándar...
Set VBComp = VBComps.Add(vbext_ct_StdModule)
Set VBCodeMod = VBComp.CodeModule
'al que le damos nombre:
VBComp.Name = "Mod_B_Excelforo"

'Finalmente, insertamos el código en el módulo
With VBCodeMod
    .InsertLines .CountOfLines + 1, TxtMacro
End With
End Sub



Al lanzar nuestra macro podemos ver el resultado:

VBA: Una Macro para crear otras Macros


4 comentarios:

  1. excelente!!
    deje de practicar macros por un tiempo, pero este código me hizo pensar que tengo ejemplos parecidos en mi baúl de los recuerdos de excel.
    gracias por despertar los buenos tiempos que pase programando en VBA-Excel.

    saludos.

    ResponderEliminar