我们使用ByRef
在VB脚本(脚本A)中调用VB脚本(比如脚本B)。
我们调试如下。
MsgBox
进行调试。并且还作为B中的第一个语句进行调试。无显示。我不确定这是什么问题,令人费解和奇怪!
感谢任何有关如何解决问题的建议!
已更新
我的道歉!有太多行代码可以完整地发布脚本。因此发布了文字说明。以下是代码中的代码段。
请注意
MsgBox
在脚本B调用之前显示正常!MsgBox
在脚本B调用之后也显示“ReturnCode”为空白!MsgBox
(第一行)没有显示。脚本A
'...
'...
MsgBox "ready to execute Script B"
If swPrint Then
cmdExecute = RootDir & "Scripts\Master\Application\" & 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"
'....
'....
感谢您调查此事的时间。如果这些片段没有意义,请告诉我。谢谢。
仍然习惯论坛上的EDIT。感谢@omegastripes花时间编辑消息。
就“MsgBox”的输出执行脚本B“& cmdExecute”而言,它只不过是带参数的脚本B文件的路径。这些参数与脚本B之前传递给所有脚本的参数相同。
\\ ScriptB -PARAMETER1 -PARAMTER2 ..
谢谢。
答案 0 :(得分:0)
第1点。
如果您想从ReturnCode
发回ExecuteStep
,则需要将其设为功能:
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)