我想通过点击Excel电子表格中的按钮来运行Perl脚本。
当指定按钮执行VB宏时,宏应该有效地执行程序。
作为我的第一个VB脚本,这就是我想出来的,这会引起一个恼人的Run-time error '424': Object required
错误。
Sub RunPerlScript()
System.Diagnostics.process.Start ("perlscript.pl")
End Sub
如何让这个脚本完成我想要它做的事情?
答案 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中。