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

Zai*_*aid 4 vb6 excel perl vba activex

我想通过单击Excel电子表格内的按钮来运行Perl脚本.

当指定按钮执行VB宏时,宏应该有效地执行程序.

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

Sub RunPerlScript()
    System.Diagnostics.process.Start ("perlscript.pl")
End Sub
Run Code Online (Sandbox Code Playgroud)

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

Col*_*ard 5

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

从文章" 如何从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
Run Code Online (Sandbox Code Playgroud)

您可能需要先安装ActivePerl

  • 第一行声明要从VBA调用的Windows API函数.顺便说一句,你错过了`)`在行尾.`Sleep`将当前线程休眠一段时间,以毫秒为单位.它用于在每次检查之间在Excel中休眠1秒钟以查看Perl脚本是否已完成.我会观察到锁定Excel并且不响应用户输入需要很长时间 - 我建议50或100毫秒就可以了.无论如何,对于允许您访问STDOUT的同步解决方案,+1.您肯定需要安装ActivePerl才能运行Perl脚本. (4认同)
  • @Zaid不,他说"你不能使用.NET类",你试图使用.NET系统的`System.Diagnostics.process.Start`.他的解决方案,使用`Shell`更简单,并且可以工作,但是当过程完成时你不会得到通知,你将无法访问输出.如果你不需要这个东西那么使用`Shell`; 否则使用我链接的解决方案. (2认同)