Tengo un archivo vbs que extrae información de mi base de datos y exporta los datos a un archivo de Excel (C:\file.csv). Una vez hecho esto, ejecuto una serie de macros (vba) para formatear estos datos. Estas macros son siempre las mismas, normalmente las copio y pego desde un archivo de texto en la hoja de cálculo y luego las ejecuto manualmente.
¿Hay alguna manera de incluir la macro vba en el archivo vbs para que, después de exportar los datos a la hoja de cálculo, se ejecuten las macros?Soluciones similaresmostrar cómollamaruna macro predefinida en un archivo de Excel, donde quiero que el contenido de la macro se guarde/ejecute en/desde mi archivo vbs. Esto será útil ya que vbs está creando un archivo nuevo y luego ejecutará macros de formato.
Mi pensamiento es que necesitaré usarSet objWorkbook = objExcel.Workbooks.Open("C:\file.csv")
Respuesta1
Estás en el camino correcto. Lo primero que necesita es configurar una nueva variable para Excel.Application mediante enlace tardío. Es debajo de ese objeto donde se esconden todas las ventajas normales de Excel VBA. A continuación se muestra un script vbs de ejemplo que abrirá un nuevo libro, agregará una nueva hoja, la llamará "PRUEBA" y agregará contenido a la celda A1
de esa nueva hoja. Cuando termine, vbs hará eco de "Terminado".
Sub createWB()
'Set the excel application variable
set xlApp = CreateObject("Excel.Application")
'Make it visible, or hide it in the background
xlApp.Application.Visible = true
'Open a new workbook, for instance
set xlWB = xlApp.Workbooks.Add()
xlWB.Activate
'Add a sheet, name it test, bring it front and center
set xlSheet = xlWB.Worksheets.Add()
xlSheet.Name = "TEST"
xlSheet.Activate
'Put something in cell A1
xlSheet.Cells(1,1).value = "TEST CELL CONTENT"
End Sub
'Call the subroutine above
call createWB
WScript.Echo "Finished."
WScript.Quit
Es posible que tengas que jugar un poco con tu código VBA existente para hacer feliz a vbs, pero descubrirás que escribir tus macros en vbs es tan funcional como escribirlas en vba.
Respuesta2
Hace algún tiempo probé esto paravarios otros SU respuestas. La única forma que encontré es usar PowerShell en lugar de VBScript. PowerShell puede ejecutar todos los comandos de VBA. Sólo la sintaxispoderdiferir de.
Su ejemplo de VBA como script de PowerShell
$excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.Open("C:\file.csv")
$excel.visible = $true
Respuesta3
Pondría las macros en una plantilla de Excel. Luego crearía una macro de nueva creación automática en la plantilla para importar el archivo csv y ejecutar las macros de formato.
Luego haría que vbs creara y guardara el archivo csv y abriera un archivo de Excel basado en la plantilla.