我需要对VBA,Excel和WSH有特定疑问。 我有一个我想用来运行jar的excel。使用System.out.println,此jar需要4秒钟才能返回anser。
我在excel中用VBA创建了一个脚本来运行这个jar并通过StdOut.ReadAll收集结果,但问题是我每次运行它都没有得到任何结果......我正在执行java并且它返回1000,当我执行vba时似乎没有任何反应。
这是我的VBA代码:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub Test()
Dim prog As Object
Dim Exec As Object
Dim A As String
Set prog = CreateObject("WScript.Shell")
Set Exec = prog.Exec("java -jar JExcel.jar " & Range("a2").Value) <- Im passing an argument here
While Exec.Status = WshRunning
Range("b2") = "Running"
Sleep (100)
Wend
Range("b2").Value = Exec.StdOut.ReadAll
End Sub
我在这里和其他地方阅读了很多资料,但没有幸运。
有谁知道可能是什么问题?
谢谢
答案 0 :(得分:0)
假设Java和.jar
文件都不在Excel的默认保存路径中(您可以使用VBA属性Application.DefaultFilePath
进行检查),则需要指定一两个路径。
我实际上不熟悉Java,但如果你的PATH
evnironment变量(VBA:Environ("Path")
)包含Java可执行文件的路径,那么该部分应该没问题,但我想你了仍然必须指定.jar
的路径。
此外,还有一种更简单的方式来调用Shell
:
Dim RetVal
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' Run Calculator.
运行可执行程序,如果成功则返回表示程序Variant (Double)
的{{1}},否则返回零。
<强>语法强>
<强> Task ID
强>
Shell函数语法具有以下命名参数:
路径名(必需; Shell( pathname [, windowstyle ] )
)要执行的程序的名称以及任何必需的参数或命令行开关; 可能包含目录或文件夹和驱动器。
windowstyle (可选; Variant (String)
)对应于运行程序的窗口样式。如果省略Variant (Integer)
,程序将以焦点最小化启动。
windowstyle
命名参数具有以下值:
windowstyle
备注
如果 Constant Value Description
vbHide 0 Window is hidden and focus is passed to the hidden window.
vbNormalFocus 1 Window has focus and is restored to its original size and position.
vbMinimizedFocus 2 Window is displayed as an icon with focus.
vbMaximizedFocus 3 Window is maximized with focus.
vbNormalNoFocus 4 Window is restored to its most recent size and position.
The currently active window remains active.
vbMinimizedNoFocus 6 Window is displayed as an icon.
The currently active window remains active.
函数成功执行了指定文件,它将返回已启动程序的任务ID 。 任务ID 是标识正在运行的程序的唯一编号。如果Shell
函数无法启动指定的程序,则会发生错误。
注意
默认情况下,Shell
函数异步运行其他程序。这意味着在执行Shell
函数之后的语句之前,以Shell
开头的程序可能无法完成执行。
<子>(Source)子>