2015-01-12 2 views
1

У меня есть два файла.Запуск макроса Excel из внешней ошибки VBScript

  1. example.wsf: скрипт автоматизации
  2. 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") 

Я подозревал, что это может быть связано с ранним связыванием, но в основном имеют не знаю, что пошло не так.

+0

Если макросу требуется надстройка надстройки Excel, вы должны сделать это явно в коде. Когда вы автоматизируете Excel, как это, вы не получите никаких надстроек, загруженных по умолчанию. – Rory

+0

@Rory Привет, Рори, если я добавил надстройку через опцию excel, мне нужно явно загрузить надстройку в код? –

+0

Да - если это .xla/.xlam, самый простой способ - переключить свойство '.Installed' объекта' AddIn' после открытия вашей книги. – Rory

ответ

0

Похоже, вы почти у цели. Просто некоторые проблемы с форматированием. См. Фрагмент ниже. Обратите внимание на мои комментарии о пути к файлу и где макрос находится в файле excel. Дайте мне знать, если это сработает для вас.

Set objApp = CreateObject("Excel.Application") 
Set objExcel = objApp.Workbooks.Open("example.xlsm", 0, False) ''make sure you have valid path, such as a full UNC path 
objApp.Visible = True 
objApp.DisplayAlerts = False 
objApp.Run "example.xlsm!RefreshData" ' this is if the Macro is in a Module. Use "example.xlsm!sheet1.RefreshData" if it's on 
             ' sheet1, for example 
+0

Спасибо, Эдвард. Вышеупомянутый код может вызвать макрос, поэтому я не думаю, что это проблема с этим путем. Проблема в том, что при вызове макроса «varResult = API.RunApplication (« OfficeAPI »,« application = excel, method = RefreshAll »)» не выполняется. Вы столкнулись с этим раньше? –

+0

А, я думал, вы имели в виду RefreshData, когда вы говорили о внешнем приложении. Извинения, я не понимаю, почему эта строка не работает при вызове из сценария. Думаю, мне нужно будет больше узнать о приложении. Это в одной книге? –

+0

EXTRENAL_API - это api, предоставляемое приложением для подачи данных на моем ПК. Эта строка отлично работает, если я запускаю макрос внутри Excel, но он не сможет получить какие-либо данные, если макрос вызывается vbscript в example.wsf. Поведение очень странно, и я думаю, связано ли это с ранним связыванием. –

Смежные вопросы