2010-01-20 54 views
4

我想单击Excel电子表格中的按钮来运行Perl脚本。如何通过Excel中的ActiveX控件运行Perl脚本?

由于按钮被分配执行一个VB宏,宏应该有效地执行程序。

作为我的第一个VB脚本,这是我想出来的,这引发了一个令人生气的Run-time error '424': Object required错误。

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

我该如何获得这个脚本来做我想做的事?

回答

3

在VBA宏不能使用.NET类。

使用VBA Shell函数。

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

的文档:

Shell函数

运行一个可执行程序,并返回 一个Variant(双人间)代表 程序的任务ID,如果成功, 否则返回零。

语法

壳牌(路径名[,windowstyle])

Shell函数的语法具有以下 命名参数:

部分描述的路径名必需的; 变体(字符串)。要执行的程序名称 以及任何必需的参数 或命令行开关;可能包括 目录或文件夹和驱动器。在Macintosh上的 可以使用MacID 函数来指定应用程序的 签名而不是其名称。以下示例使用Microsoft Word的签名 :Shell MacID(“MSWD”)windowstyle可选。 Variant(Integer)对应于运行 程序的窗口的 样式。如果窗口样式 被省略,程序开始 与焦点最小化。在Macintosh (系统7.0或更高版本)中,窗口样式 仅确定 应用程序是否在 运行时获得焦点。

的windowstyle命名参数具有 这些值:

常数值描述0 vbHide 窗口被隐藏和焦点被传递到 隐藏窗口。 vbHide 常量不适用于 Macintosh平台。 vbNormalFocus 1 窗口有焦点,并恢复到其原始大小和位置 。 vbMinimizedFocus 2窗口显示为 作为带焦点的图标。 vbMaximizedFocus 3有焦点的窗口被最大化为 。 vbNormalNoFocus 4窗口 已恢复到其最近的大小 和位置。当前活动的 窗口保持活动状态。 vbMinimizedNoFocus 6窗口显示为图标 。当前的 活动窗口保持活动状态。

+0

看起来像这就是我所追求的。不幸的是,我必须安装ActivePerl才能启动脚本,但'Shell'绝对是我的选择...... – Zaid 2010-01-20 13:22:25

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第一

+0

我不明白你的意思是“通过一个ActiveX控件”。无论如何,希望我的回答能够做到你想要的。 – 2010-01-20 13:06:21

+0

看起来不错,但需要测试它。我有草莓在我的系统上运行......会让你知道它是如何发生的。 – Zaid 2010-01-20 13:10:37

+0

codeape表示在VBA宏中不能有对象。我有他的预感他是正确的... – Zaid 2010-01-20 13:25:00

1

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