如何通过Excel中的ActiveX控件运行Perl脚本?

时间:2010-01-20 12:55:32

标签: perl excel vba vb6 activex

我想通过点击Excel电子表格中的按钮来运行Perl脚本。

当指定按钮执行VB宏时,宏应该有效地执行程序。

作为我的第一个VB脚本,这就是我想出来的,这会引起一个恼人的Run-time error '424': Object required错误。

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

如何让这个脚本完成我想要它做的事情?

3 个答案:

答案 0 :(得分:5)

我没有写这个片段,但这对你的问题似乎是一个很好的答案。

来自文章How to execute a perl script from 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

答案 1 :(得分:3)

您不能在VBA宏中使用.NET类。

使用VBA Shell功能。

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

文档:

  

外壳功能

     

运行可执行程序并返回   表示的变体(Double)   程序的任务ID如果成功,   否则它会返回零。

     

语法

     

壳牌(路径[,windowstyle])

     

Shell函数语法有这些   命名参数:

     

部分描述pathname必需;   变体(字符串)。程序名称   执行和任何必需的参数   或命令行开关;可能包括   目录或文件夹和驱动器。在   Macintosh,您可以使用MacID   用于指定应用程序的函数   签名而不是其名称。该   以下示例使用签名   对于Microsoft Word:Shell   MacID(“MSWD”)windowstyle可选。   Variant(Integer)对应的   窗户的风格   程序即将运行。如果是windowstyle   省略,程序启动   最小化焦点。在Macintosh上   (系统7.0或更高版本),windowstyle   只决定是否   应用程序获得焦点   运行

     

windowstyle命名参数有   这些价值观:

     

常量值描述vbHide 0   隐藏窗口并传递焦点   到隐藏的窗口。 vbHide   常数不适用于   Macintosh平台。 vbNormalFocus 1   窗口有焦点并恢复到   它的原始大小和位置。   显示vbMinimizedFocus 2窗口   作为一个有焦点的图标。   vbMaximizedFocus 3窗口最大化   有重点。 vbNormalNoFocus 4窗口   恢复到最近的大小   和位置。目前活跃   窗口仍然有效。   vbMinimizedNoFocus 6窗口是   显示为图标。目前   活动窗口仍然有效。

答案 2 :(得分:1)

ActiveState的PDK具有PerlCtrl,允许您将perl脚本打包为ActiveX控件。它将您的脚本和所有依赖项收集到一个整洁的DLL中。