Execute macros do Excel (vba) a partir do arquivo vbscript

Execute macros do Excel (vba) a partir do arquivo vbscript

Tenho um arquivo vbs que extrai informações do meu banco de dados e exporta os dados para um arquivo Excel (C:\file.csv). Feito isso, executo uma série de macros (vba) para formatar esses dados. Essas macros são sempre iguais, normalmente copio/colo-as de um arquivo de texto na planilha e depois as executo manualmente.

Existe uma maneira de incluir a macro vba no arquivo vbs para que, após os dados serem exportados para a planilha, as macros sejam executadas?Soluções semelhantesmostrar como fazerchamaruma macro predefinida em um arquivo Excel, onde desejo que o conteúdo da macro seja salvo/executado no/do meu arquivo vbs. Isso será útil, pois o vbs está criando um arquivo totalmente novo e, em seguida, executará macros de formatação.

Meu pensamento é que vou precisar usarSet objWorkbook = objExcel.Workbooks.Open("C:\file.csv")

Responder1

Você está no caminho certo. O que você precisa primeiro é configurar uma nova variável para Excel.Application usando ligação tardia. É sob esse objeto que todos os itens normais do Excel VBA se escondem. Abaixo está um exemplo de script vbs que abrirá uma nova pasta de trabalho, adicionará uma nova planilha, nomeará-a como "TESTE" e adicionará algum conteúdo à célula A1dessa nova planilha. Quando terminar, o vbs irá ecoar "Finished"

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

Você pode ter que brincar um pouco com seu código VBA existente para deixar o vbs feliz, mas você descobrirá que escrever suas macros em vbs é tão funcional quanto escrevê-las em vba.

Responder2

Algum tempo atrás eu tentei isso pormuitos outros Respostas SU. A única maneira que encontrei é usar o PowerShell em vez do VBScript. O PowerShell pode executar todos os comandos VBA. Apenas a sintaxepodediferem.

Seu exemplo VBA como script do PowerShell

$excel = New-Object -ComObject excel.application 
$workbook = $excel.Workbooks.Open("C:\file.csv")
$excel.visible = $true

Responder3

Eu colocaria as macros em um modelo do Excel. Eu criaria então uma macro autonew no modelo para importar o arquivo csv e executar as macros de formatação.

Então eu faria com que o vbs criasse e salvasse o arquivo csv e abrisse um arquivo Excel baseado no modelo.

informação relacionada