У меня есть файл 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-файл на основе шаблона.