2013-06-28 3 views
0

У меня есть код, показанный ниже, который открывает книгу и запускает соответствующий макрос. Запуск этого скрипта через excel работает просто отлично, но запуск файла .vbs с тем же кодом не запускает макрос. Я попробовал дважды щелкнуть файл и запустить его через подсказку cmd с помощью «cscript.exe LaunchMacro.vbs». Кроме того, использование WScript.Echo не печатает в моей командной строке. Я что-то пропустил?VBA: Невозможно реализовать Excel VBS за пределами excel

Спасибо!


Option Explicit 

Sub LaunchMacro() 
Dim xlApp, xlBook  
Dim oShell: Set oShell = CreateObject("WScript.Shell")  
oShell.CurrentDirectory = "H:" 
Set xlApp = CreateObject("Excel.Application")  
xlApp.Visible = True 
xlApp.Application.Visible = False 

Set xlBook = xlApp.Workbooks.Open("H:\SW Tool Resources\test\tester.xlsm") 
MsgBox ("File Opened") 
xlApp.DisplayAlerts = False 
xlApp.Application.Run ("tester.xlsm!Module3.split") 
MsgBox ("Application Should Have Run") 
xlBook.Saved = True 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

End Sub 
+0

Даже несмотря на очевидные сходства VBS не то же самое, как VBA (Visual Basic для приложений), к сожалению, это не так просто, как копирование и вставка код из Excel VBA. – ChrisProsser

+0

Могу ли я спросить, в чем заключается мотивация перемещения кода в сценарий .vbs? – ChrisProsser

ответ

1

VBS и VBA различны.

Попробуйте поставить только этот код в файл VBS и запустить его:

Set xlApp = CreateObject("Excel.Application")  
xlApp.Visible = True 
xlApp.Application.Visible = False 

Set xlBook = xlApp.Workbooks.Open("H:\SW Tool Resources\test\tester.xlsm") 
MsgBox ("File Opened") 
xlApp.DisplayAlerts = False 
xlApp.Application.Run ("tester.xlsm!Module3.split") 
MsgBox ("Application Should Have Run") 
xlBook.Saved = True 
xlApp.Quit 

Я не проверял, и очень вероятно, не удастся. Но это должно быть в правильном направлении.

Edit:

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

Например, это будет работать только Sub1:

Sub Sub1() 
    MsgBox "1" 
End Sub 
Sub Sub2() 
    MsgBox "2" 
End Sub 
Sub1 
+0

+1 Проблема, скорее всего, процедура никогда не вызывается. Тем не менее я удаляю строку 'xlApp.Application.Visible = False'. 'xlApp.Visible' и' xlApp.Application.Visible' - это то же самое свойство. Нет смысла сначала отображать приложение, а затем снова спрятать его на следующем шаге. Также я бы установил 'xlApp.DisplayAlerts = True' во время отладки. –

+0

Я бы добавил к комментарию Ансгара: когда вы делаете 'xlApp.Visible = True', Excel загружает интерфейс (который медленный), и каждая операция с этого момента обновит интерфейс (который медленный). Я бы сохранил его во время процесса отладки, а затем оставил его невидимым, когда все будет хорошо. – stenci