2017-08-04 330 views
1

エラーが発生した場合は、DisplayCustomErrorを無視しますが、例外をスローしません。 期待される結果 - objHTTP.send(json)の後に例外メッセージがスローされます。 Call Err.Raiseを試しましたが、何も投げていません。コードはVBスクリプトVBScriptでのエラー処理:エラーが発生していない

sub run 
On Error Resume Next 
    wrapper.getVariable("Plant_Price_PerKW").value = excel.range("'Cases'!$H$331") 
    wrapper.getVariable("Net_Present_Value").value = excel.range("'Cases'!$H$782") 
    wrapper.getVariable("IRR").value = excel.range("'Cases'!$H$783") 
Dim strMessage 
    If Err.Number <> 0 And excel.range("'Cases'!$H$783") = "" Then 
    strMessage = "IRR cannot be computed. " 
    DisplayCustomError(strMessage) 
    WScript.Quit 
    ElseIf Err.Number <> 0 And (excel.range("'Cases'!$H$783") <> "") Then 
    strMessage = "Other Outputs cannot be computed." 
    DisplayCustomError(strMessage) 
    WScript.Quit 
    End If 
end sub 

Sub DisplayCustomError(strMessage) 
If Err.Number <> 0 Then 
    Dim errorMessage, objHTTP, URL, json, errorCode, uniqueId, networkInfo, jobId 
    errorMessage ="Error while executing EVMLite. Error number " & Err.Number & ". " & Err.Description & " " & Err.Source & strMessage 
    errorCode = "ERR-1004" 
    uniqueId = wrapper.getVariable("UniqueId").value 
    Set networkInfo = CreateObject("WScript.NetWork") 
    jobId = networkInfo.ComputerName 
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")  
    URL = "http://10.93.244.224343:9005/vpp/logerror" 
    objHTTP.Open "POST", URL, False 
    objHTTP.SetRequestHeader "Content-Type", "application/json" 
    json = "{""jobId"": """& jobId &""", ""uniqueId"": """& uniqueId &""", ""errorCode"": """& errorCode &""", ""errorMessage"": """& errorMessage &"""}" 
    'MsgBox json 
    objHTTP.send (json) 

    On Error Goto 0 

    Call Err.Raise(vbObjectError + 10, "EVM Failed to execute", errorMessage) 
    'MsgBox objHTTP.ResponseText 

End If 
end sub 
+0

エラーを無視するために「On Error Resume Next」を使用しています。それを取り除く。 – braX

+0

@braX On Error Resume NextSubを削除しようとしましたが、例外がスローされていますが、サブDisplayCustomError(strMessage)には入っていないので、2回目はDisplayCustomError(strMessage)になります。 –

+0

どのようなエラーが発生しているかを判断し、ifステートメントを使用してエラーを回避します。エラーに応じて、コードを書くのが悪い方法です。 – braX

答えて

2

であるOn ErrorのVBScriptの実装についての面白いところは、グローバルではないということです - それは実際に範囲によって制限されています。したがって、SubまたはFunctionにOn Error Resume Nextを適用し、それをオフにする新しいFunctionまたはSubを入力すると、SubまたはFunctionが終了するとその設定が元に戻ります。

あなたの場合、Sub runOn Error Resume Nextと設定し、次にを呼び出してOn Error GoTo 0と設定します。あなたがまだ内部にいる間はしか適用されません。DisplayCustomErrorです。 Err.Raiseのために終了すると、Sub runはその範囲ではまだOn Error Resume Nextに設定されているため、実行されます。あなたはDisplayCustomError

に電話をかける前に、明示的にSub runOn Error GoTo 0を述べる必要があります

はここでVBSはあなたがテストすることができますファイルの例です。これを実行すると、何も投げられず、プログラムは「完了」というメッセージを表示します。 Sub1の行のコメントを外すと、エラー "例2"が発生します。

Sub Sub1() 
    On Error Resume Next 
    Err.Raise 1, "Example 1" 
    'On Error Goto 0 
    Sub2 
End Sub 

Sub Sub2() 
    On Error Goto 0 
    Err.Raise 2, "Example 2" 
End Sub 

Sub1 
WScript.Echo "Done" 
+0

DisplayCustomError(strMessage)の前にOn Error Goto 0とCall Err.Raiseを入れてWScript.Quitを削除しました。今、それは動作していると私は欲しいエラーを投げている。ご協力いただきありがとうございます。感謝します。 –

+0

@DevendraVastrakarあなたは大歓迎です!投票ボタンの下にあるチェックマークをクリックすることで、この回答に合格とマークすることを忘れないでください。 :) – BoffinbraiN

関連する問題