我们使用ByRef
在VB脚本(脚本a)中调用VB脚本(比如脚本B)。
- 脚本A在调用B之前调用了多个其他脚本,它们都能工作
- 所有脚本都放在同一个文件夹中
- 问题是B没有接到电话
- 如果我们双击B,它工作得很好
我们调试如下。
- 我们试图通过在调用B之前/之后放置
MsgBox
来进行调试。同时作为B中的第一条语句。无显示 - 只是为了查看是否调用了正确的脚本路径,我们删除了B,脚本A挂起,表明它找不到B
我不知道出了什么问题,令人费解,很奇怪!
感谢任何关于如何解决问题的建议!
更新
我的道歉!代码行太多,无法完整发布脚本。因此张贴了文字说明。以下是代码片段。
票据
MsgBox
脚本B调用之前显示得很好MsgBox
在脚本B调用之后也只显示"ReturnCode"为空- 脚本B中的
MsgBox
(第一行)不会显示
脚本A
'...
'...
MsgBox "ready to execute Script B"
If swPrint Then
cmdExecute = RootDir & "ScriptsMasterApplication" & ScriptB & " //B " & _
"-JOB=" & strJobNumber & " " & "-APP=" & strApp & strEnv & strMRO & strZIP & " " & "-QAPDF=" & strQAPDF & " " & "-QAPRNT=" & strQAPRNT
MsgBox "execute Script B " & cmdExecute
ExecuteStep cmdExecute
MsgBox "back from Script B " & ReturnCode
End If
Public Sub ExecuteStep(ByRef ExecCommandLine)
If swStartStop Then
ReturnCode = VSShell.Run(ExecCommandLine, , True)
CheckForError ReturnCode, intStep, ExecCommandLine
End If
End Sub
脚本B
MsgBox "in Script B"
'....
'....
感谢您花时间调查此事。如果这些片段没有意义,请告诉我。非常感谢。
仍然习惯论坛上的编辑。感谢@omegastripes花时间编辑消息。
就"MsgBox"执行脚本B"&cmdExecute"的输出而言,它只不过是带参数的脚本B文件的路径。这些参数与脚本B之前传递给所有脚本的参数相同。
\\ScriptB-PARAMETER1-PARAMTER2.
谢谢。
点1。
如果你想从ExecuteStep
发回ReturnCode
,你需要将其作为一个函数:
Function ExecuteStep(ExecCommandLine)
If swStartStop Then
ReturnCode = VSShell.Run(ExecCommandLine, , True)
CheckForError ReturnCode, intStep, ExecCommandLine
End If
ExecuteStep = ReturnCode
End Function
然后
If swPrint Then
...
...
' This will call ExecuteStep and pass back the ReturnCode
' ----------------------------------------------------------
MsgBox "back from Script B " & ExecuteStep(cmdExecute)
End If
点2
我怀疑脚本B没有被调用,因为swStartStop
正在评估为False
。。。要么是错误的,要么是因为打字错误。最好在脚本顶部使用Option Explicit
,这将迫使您声明(dim
)所有变量,并在运行时出现拼写错误。还将所有必需的变量作为参数传递给函数,以使数据流更加清晰。
Function ExecuteStep(ExecCommandLine, swStartStop)