Crear y ejecutar macro de Excel desde Visual Basic.
Visual Basic 21 octubre 2008
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:
-
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
A disfrutarla con salud que a mi me ha costado un poco llegar a ella.
Posts anterior y posterior:
Posts Relacionados:
- Previo: « Funciones para comprobar caracteres en cadenas. Visual Basic.
- Siguiente: Importar Excel a tabla de Access con Visual Basic. »
diciembre 3rd, 2008 a las 9:24 pm
Muchas gracias por el codigo ! me ayudo a resolver una gran duda.
diciembre 15th, 2008 a las 6:15 pm
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