2017-01-11 7 views
0

ByRef을 사용하여 VB 스크립트 (스크립트 A) 내에서 VB 스크립트 (예 : 스크립트 B)를 호출합니다.VB 스크립트 내에서 VB 스크립트 호출

  1. 스크립트 A는 B를 호출하기 전에 다른 여러 스크립트를 호출하고 작동합니다.
  2. 모든 스크립트는 같은 폴더에 있습니다.
  3. 문제는 B가 호출되지 않는다는 것입니다.
  4. 우리가 B를 두 번 클릭하면 잘 작동합니다!

다음과 같이 디버깅했습니다.

  1. MsgBox을 B 호출 직전/직후에 배치하여 디버깅하려고했습니다. 또한 B의 첫 번째 문도 표시됩니다. 없음이 표시됩니다.
  2. 올바른 스크립트 경로가 호출되고 있는지 확인하기 위해 B를 제거하고 스크립트 A가 멈추었습니다 (B가 발견되지 않음을 나타냄)!

나는 무엇이 문제인지 모르지만, 수수께끼 같고 이상합니다.

문제를 해결하는 방법에 대한 제안을 감사하십시오!


내 사과 업데이트! 스크립트 전체를 게시하는 코드 라인이 너무 많습니다. 따라서 게시 된 텍스트 설명. 다음은 코드에서 발췌 한 내용입니다.

참고 잘 스크립트 B 통화 표시하기 전에

  1. MsgBox!
  2. MsgBox 스크립트 B 호출 직후에 "returncode"가 비어 있다고 표시됩니다.
  3. MsgBox 스크립트 B (맨 처음 줄)에 표시되지 않습니다.

스크립트

'... 
'... 

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은 .. 감사합니다. 그런 다음

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

: 포인트 1.

당신은 당신이 그것을 함수를 만들 필요가 ExecuteStep에서 ReturnCode 다시 보내려면

+0

실제 코드를 넣을 수 있습니까? 텍스트 설명은 좋지만 프로그램을 보지 않고 누구든지 프로그래밍 오류를 지적 할 수 있다고 가정합니까? – Tomalak

+1

안녕하세요. 스택 오버플로를 환영합니다. [mcve]를 제공하지 않으면 도움을 받기가 어렵습니다. 그리고 테스트 1에 따르면 "B를 호출하기 전에"MsgBox "가 표시되지 않으면 문제가 그 전에 거짓말을해야하므로 코드가 해당 부분에 도달하지 않는다고 가정합니다. 어쨌든, 우리는 문제가있는 코드를 공유하는 경우에만 당신을 도울 수 있습니다 –

+0

질문을 편집하고'MsgBox "행에서 출력을 추가하십시오 ScriptB"& cmdExecute'를 실행하십시오. – omegastripes

답변

0

이래로 스크립트 B가 불려지지 않는다고 생각합니다.은 오류가 있거나 오타로 인해 False ...으로 평가됩니다. 스크립트 상단에 Option Explicit을 사용하는 것이 더 좋을 것입니다. 이렇게하면 모든 변수를 (dim)로 선언하게되고 런타임에 오타가 생깁니다. 또한 필요한 모든 변수를 인수로 함수에 전달하여 데이터 흐름을보다 명확하게 만듭니다.

Function ExecuteStep(ExecCommandLine, swStartStop)