У меня есть два файла.Запуск макроса Excel из внешней ошибки VBScript
- example.wsf: скрипт автоматизации
- example.xlsm: шаблон Excel с макросом, содержит API вызов к внешнему серверу для извлечения данных.
Я пытаюсь вызвать макрос в example.wsf.
Код example.wsf:
<package>
<job id="example">
<script language="vbscript">
Set objApp = CreateObject("Excel.Application")
Set objExcel = objApp.Workbooks.Open("example.xlsm",0,FALSE)
objApp.Visible = True
objApp.DisplayAlerts = False
objApp.Run("RefreshData")
msgbox "closing"
objExcel.Close
objApp.Quit
Set objExcel = Nothing
Set objApp = Nothing
set objShell = Nothing
</script>
</job>
</package>
в программе Excel Макро-код в example.xlsm:
Public Sub RefreshData()
Dim API As New EXTERNAL_API
Dim varResult As Variant
Dim vSheet As String
Dim LastRow, LastCol, vResult
vSheet = "D"
ActiveWorkbook.Sheets(vSheet).Select
Range("A6").Select
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
LastRow = ActiveWorkbook.Sheets(vSheet).Cells(8, 1).End(xlDown).Row
LastCol = 18
API.ActivateAPI
varResult = API.RunApplication("OfficeAPI", "application=excel,method=RefreshAll")
MsgBox (varResult)
End Sub
Макрос сам работает хорошо, если он запускается внутри рабочей книги Excel.
Но когда макрос вызывается из VBScript, то EXTERNAL_API не выполнить, то есть следующая строка не выполняет:
varResult = API.RunApplication("OfficeAPI", "application=excel,method=RefreshAll")
Я подозревал, что это может быть связано с ранним связыванием, но в основном имеют не знаю, что пошло не так.
Если макросу требуется надстройка надстройки Excel, вы должны сделать это явно в коде. Когда вы автоматизируете Excel, как это, вы не получите никаких надстроек, загруженных по умолчанию. – Rory
@Rory Привет, Рори, если я добавил надстройку через опцию excel, мне нужно явно загрузить надстройку в код? –
Да - если это .xla/.xlam, самый простой способ - переключить свойство '.Installed' объекта' AddIn' после открытия вашей книги. – Rory