如何从 VBA 执行 Perl 脚本






4.44/5 (5投票s)
如何在 VBA 中执行 Perl 脚本。
引言
本文简要介绍了如何从 VBA 宏中执行 Perl 脚本(或任何其他外部程序)。您可以使用此方法为您的脚本提供一种方便的参数收集方式。只需在 VBA 编辑器中绘制一个表单(使用输入字段表示所有参数),然后使用命令行参数执行脚本。
脚本
首先,您需要一个执行所有工作的 Perl 脚本。以下是一个非常有用的脚本的代码:
print "Hello World from perl\nArgument[0]:".$ARGV[0];
die "Error in Perl\n";
将此脚本保存到 C:\temp\myperl.pl。抱歉,路径是硬编码的!该脚本使用第一个命令行参数打印一些内容到 STDOUT (print
)。它还打印一个值到 STDERR (die
),该值将在我们的 Excel 宏中显示。
宏
宏代码执行外部程序(这里是 Perl 脚本),等待程序结束,并使用 MsgBox
显示结果。要执行外部进程,我们需要创建一个名为 WScript.She
ll
的对象,并使用其 Exec
方法。WScript.Shell
对象是 Microsoft Scripting Runtime 的一部分。这意味着我们必须添加对该库的引用(Extras -> Add-ins...)。
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
另一件重要的事情:如何等待进程结束?我们声明了函数 Sleep
。只要进程正在运行,就会调用此函数 While oExec.Status <> 1.
为什么???
使用 Excel 表单收集命令行参数为您的用户提供了一种方便的方式来执行 Perl 脚本,而无需打开命令提示符并键入类似的内容:
>perl myperl.pl param1=value1 param2=value2 ...