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

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

由于该button被分配执行一个VBmacros,macros应该有效地执行该程序。

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

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

我怎样才能让这个脚本去做我想做的事?

您不能在VBAmacros中使用.NET类。

使用VBA Shellfunction。

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

文档:

Shell函数

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

句法

壳(path名[,windowstyle])

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

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

windowstyle命名参数具有以下值:

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

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

从文章“ 如何从VBA执行perl脚本 ”

 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

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