Как запустить скрипт Perl через элемент управления ActiveX в Excel? - PullRequest
4 голосов
/ 20 января 2010

Я хочу запустить Perl-скрипт одним нажатием кнопки внутри электронной таблицы Excel.

Поскольку кнопка назначена для выполнения макроса VB, макрос должен эффективно выполнять программу.

Как мой первый в истории VB-скрипт, это то, что я придумал, которое выдает раздражающую ошибку Run-time error '424': Object required.

Sub RunPerlScript()
    System.Diagnostics.process.Start ("perlscript.pl")
End Sub

Как я могу заставить этот скрипт делать то, что я хочу?

Ответы [ 3 ]

5 голосов
/ 20 января 2010

Я не написал этот фрагмент, но, похоже, это хороший ответ на ваш вопрос.

Из статьи " Как выполнить Perl-скрипт из VBA " :

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub RunPerl()
    MsgBox ("Start of macro")
    Dim oWsc As Object
    Set oWsc = CreateObject("WScript.Shell")
    Dim oExec As Object
    Set oExec = oWsc.Exec("perl C:\temp\myperl.pl StartParam")
    While oExec.Status <> 1 ' Wait for process
        Sleep 1000
    Wend
    MsgBox ("STDOUT" + oExec.StdOut.ReadAll())
    MsgBox ("STDERR" + oExec.StdErr.ReadAll())
    Set oWsc = Nothing
    MsgBox ("End of macro")
End Sub

Возможно, вам сначала потребуется установить ActivePerl

3 голосов
/ 20 января 2010

Нельзя использовать классы .NET в макросе VBA.

Используйте функцию VBA Shell.

Shell "p:\ath\to\perlscript.pl"

Документация:

Функция оболочки

Запускает исполняемую программу и возвращает Вариант (Double), представляющий идентификатор задачи программы в случае успеха, в противном случае возвращается ноль.

Синтаксис

Shell (путь [, Оформление_окна])

Синтаксис функции Shell имеет следующие Именованные аргументы:

Часть Описание pathname Обязательный; Вариант (Строка). Название программы выполнить и любые необходимые аргументы или переключатели командной строки; может включать каталог или папка и диск. На Macintosh, вы можете использовать MacID функция для определения приложения подпись вместо ее имени. В следующем примере используется подпись для Microsoft Word: Shell MacID ("MSWD") стиль окна Необязательно. Вариант (целое число), соответствующий стиль окна, в котором Программа должна быть запущена. Если стиль окна опущено, программа запущена минимизировано с фокусом. На Макинтоше (Система 7.0 или новее), стиль окна определяет только то, приложение получает фокус, когда оно бежать.

Аргумент с именем окна имеет эти значения:

Константа Значение Описание vbHide 0 Окно скрыто и фокус пройден в скрытое окно. VbHide константа не применяется на Платформы Macintosh. vbNormalFocus 1 Окно имеет фокус и восстанавливается его оригинальный размер и положение. vbMinimizedFocus 2 Окно отображается как значок с фокусом. vbMaximizedFocus 3 Окно развернуто с упором. Окно vbNormalNoFocus 4 восстановлен в своем последнем размере и положение. В настоящее время активный окно остается активным. Окно vbMinimizedNoFocus 6 отображается в виде значка. В настоящее время активное окно остается активным.

1 голос
/ 20 января 2010

PDK ActiveState имеет PerlCtrl , что позволяет упаковывать сценарий Perl в качестве элемента управления ActiveX Он собирает ваш скрипт и все зависимости в аккуратную DLL.

...