Crear y ejecutar macro de Excel desde Visual Basic.

A veces nos es muy tediosa la forma de preparar determinada información para ser explotada entre las aplicaciones Excel y otros programas o bases de datos.

Hoy voy a dejar aqui plasmado para quien lo necesite y para mi mismo si en alguna otra ocasión necesito tirar de ello de nuevo, la forma de crear desde Visual Basic una Macro de Excel y ejecutarla después.

Sin duda podemos encontrar por la red multitud de formas de ejecutar una macro ya existente en un fichero de Excel desde visual Basic pero ¿que ocurre si la macro la necesitamos ejecutar no está en el libro de Excel y debemos tratar multitud de ficheros?

La única forma es grabar la macro en el fichero antes de ejecutarla y todo ello desde Visual Basic. A continuación os expongo el procedimiento que yo mismo he utilizado.

Primero he creado la macro necesaria en Excel asegurándome del buen funcionamiento de la misma. Hay que tener claro que si cometemos un error, este será trasladado a todos los ficheros que tratemos.

Cuando ya la tenemos la forma de utilizarla en un procedimiento sería la siguiente:

[vb]
Private Sub PreparaExcel(sArchivo As String)
‘ Arrancamos Excel
Dim xlapp As Object ‘Aplicacion de Excel
Set xlapp = CreateObject(“Excel.Application”)

‘ La hacemos visible, si comentamos esta linea el excel no se verá
xlapp.Visible = True

‘ Añadimos una hoja de trabajo
Dim xlbook As Object ‘ Hoja de trabajo de Excel
Set xlbook = xlapp.Workbooks.Open(sArchivo)

‘ Ahora añadimos un modulo
Dim xlmodule As Object ‘VBComponent
Set xlmodule = xlbook.VBProject.VBComponents.Add(1)
Msgbox “Creando Macro…”
‘ Añade la macro al nuevo módulo
Dim strCode As String
strCode = _
“sub MiMacro()” & vbCr & _
“Cells.Select” & vbCr & “Selection.UnMerge” & vbCr & _
“Rows(“”1:2″”).Select” & vbCr & _
“Range(“”A2″”).Activate” & vbCr & _
“Selection.Delete Shift:=xlUp” & vbCr & _
“Range(“”A1:C2″”).Select” & vbCr & “Selection.ClearContents” & vbCr & _
“Columns(“”B:B””).Select” & vbCr & _
“Selection.Delete Shift:=xlToLeft” & vbCr & _
“Columns(“”C:J””).Select” & vbCr & _
“Selection.Delete Shift:=xlToLeft” & vbCr & _
“Columns(“”D:Q””).Select” & vbCr & _
“Selection.Delete Shift:=xlToLeft” & vbCr & _
“ActiveWindow.ScrollColumn = 1″ & vbCr & _
“ActiveWindow.ScrollColumn = 2″ & vbCr & _
“ActiveWindow.ScrollColumn = 1″ & vbCr & _
“Range(“”B1″”).Select” & vbCr & _
“Range(“”B1:B1500″”).Select” & vbCr & _
“Selection.Cut Destination:=Range(“”B2:B1501″”)” & vbCr & _
“Columns(“”A:A””).ColumnWidth = 47.86″ & vbCr & _
“Columns(“”B:B””).ColumnWidth = 48.57″ & vbCr & _
“Columns(“”C:C””).ColumnWidth = 12″ & vbCr & _

“ActiveWorkbook.Save” & vbCr & _
“end sub”
xlmodule.CodeModule.AddFromString strCode

‘ Ejecutamos la macro
Msgbox “Ejecutando Macro…”
xlapp.Run “MiMacro”

‘ Acuerdate de liberar el módulo
Set xlmodule = Nothing

‘ Salvamos el fichero y cerramos el Excel
xlbook.Saved = True
xlapp.Quit

End Sub
[/vb]

A disfrutarla con salud que a mi me ha costado un poco llegar a ella.

3 comentarios en “Crear y ejecutar macro de Excel desde Visual Basic.

  1. estimado
    Como puedo insertar codigo en el THISWORKBOOK de un archivo Excel????

    En un modulo ya está, con ayuda poderosa que diste está perfecto.

    Ahora ecesito controlar unos eventos como el CLIK y otros en la planilla excel, que lo desencadena el evento:

    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    ‘***** CODIGO
    End Sub

    y no puedo encontrar el codigo vb6 para instar el codigo en el THISWORKBOOK
    aguardo vuestra ayuda y desde ya muchas gracias

  2. Lo mio es muy simple, pero para mi dificil de resolver, sencillamente necesito exportar a Excel una foto, programandolo con VisualBASIC 6.0
    Hasta ahora exporto e importo datos a las celdas de Excel, pero necesito ahora EXPORTAR fotos a Excel, residentes en alguna carpeta de mi disco duro.
    Gracias

Los comentarios están cerrados.