65.9K
CodeProject 正在变化。 阅读更多。
Home

如何从 VBA 执行 Perl 脚本

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.44/5 (5投票s)

2006年9月25日

CPOL

1分钟阅读

viewsIcon

77904

downloadIcon

380

如何在 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.Shell 的对象,并使用其 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 ...
© . All rights reserved.