Запустить макросы Excel (VBA) из файла VBScript

Запустить макросы Excel (VBA) из файла VBScript

У меня есть файл vbs, который извлекает информацию из моей базы данных и экспортирует данные в файл Excel (C:\file.csv). После этого я запускаю ряд макросов (vba) для форматирования этих данных. Эти макросы всегда одинаковы, я обычно копирую/вставляю их из текстового файла в электронную таблицу, а затем вручную запускаю.

Можно ли как-то включить макрос vba в файл vbs, чтобы после экспорта данных в электронную таблицу макросы запускались?Похожие решенияпоказать каквызовпредопределенный макрос в файле Excel, где я хочу, чтобы содержимое макроса сохранялось/выполнялось в/из моего файла vbs. Это будет полезно, поскольку vbs создает совершенно новый файл, а затем запускает макросы форматирования.

Я думаю, мне нужно будет использоватьSet objWorkbook = objExcel.Workbooks.Open("C:\file.csv")

решение1

Вы на правильном пути. Сначала вам нужно настроить новую переменную для Excel.Application с помощью позднего связывания. Именно под этим объектом скрываются все обычные возможности Excel VBA. Ниже приведен пример скрипта vbs, который откроет новую книгу, добавит новый лист, назовет его "TEST" и добавит некоторое содержимое в ячейку A1этого нового листа. Когда все будет готово, vbs выведет "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

Возможно, вам придется немного повозиться с существующим кодом VBA, чтобы заставить VBS работать, но вы обнаружите, что написание макросов в VBS столь же функционально, как и написание их в VBA.

решение2

Некоторое время назад я попробовал это длянесколько других СУ ответы. Единственный способ, который я нашел, — использовать PowerShell вместо VBScript. PowerShell может выполнять любую команду VBA. Только синтаксисможетотличаются.

Ваш пример VBA как скрипт PowerShell

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

решение3

Я бы поместил макросы в шаблон Excel. Затем я бы создал в шаблоне макрос autonew для импорта CSV-файла и запуска макросов форматирования.

Затем я бы заставил VBS создать и сохранить CSV-файл и открыть Excel-файл на основе шаблона.

Связанный контент