Vba VBScript上的错误处理:未引发错误
若发生错误,那个么它将子显示CustomError,但不会引发异常。 预期结果-在objHTTP.send(json)之后,它应该抛出异常消息。我试过打错电话,但没什么问题。代码是用VBscript编写的Vba VBScript上的错误处理:未引发错误,vba,excel,vbscript,adsutil.vbs,Vba,Excel,Vbscript,Adsutil.vbs,若发生错误,那个么它将子显示CustomError,但不会引发异常。 预期结果-在objHTTP.send(json)之后,它应该抛出异常消息。我试过打错电话,但没什么问题。代码是用VBscript编写的 sub run On Error Resume Next wrapper.getVariable( "Plant_Price_PerKW" ).value = excel.range( "'Cases'!$H$331" ) wrapper.getVariable( "Net
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
子运行
出错时继续下一步
wrapper.getVariable(“Plant\u Price\u PerKW”).value=excel.range(“'Cases'!$H$331”)
wrapper.getVariable(“净现值”).Value=excel.range(“'Cases'!$H$782”)
wrapper.getVariable(“IRR”).value=excel.range(“'Cases'!$H$783”)
暗消息
如果错误编号0和excel.range(“'Cases'!$H$783”)=”则
strMessage=“无法计算内部收益率。”
DisplayCustomError(strMessage)
WScript.Quit
其他错误编号0和(excel.range(“'Cases'!$H$783”)”)然后
strMessage=“无法计算其他输出。”
DisplayCustomError(strMessage)
WScript.Quit
如果结束
端接头
子显示CustomError(strMessage)
如果错误号为0,则
Dim errorMessage、objHTTP、URL、json、errorCode、uniqueId、networkInfo、jobId
errorMessage=“执行EVMLite.Error number时出错”&Err.number&“&Err.Description&&”&Err.Source&strMessage
errorCode=“ERR-1004”
uniqueId=wrapper.getVariable(“uniqueId”).value
设置networkInfo=CreateObject(“WScript.NetWork”)
jobId=networkInfo.ComputerName
设置objHTTP=CreateObject(“MSXML2.ServerXMLHTTP”)
URL=”http://10.93.244.224343:9005/vpp/logerror"
objHTTP.Open“POST”,URL,False
objHTTP.SetRequestHeader“内容类型”、“应用程序/json”
json=“{”“jobId”“:”“&jobId&”“,”“uniqueId”“:”“&uniqueId&”“,”“errorCode”“:”“&errorCode&”“,”“errorMessage”“:”“&errorMessage&”“}”
'MsgBox json
objHTTP.send(json)
错误转到0
调用Err.Raise(vbObjectError+10,“EVM执行失败”,errorMessage)
'MsgBox objHTTP.ResponseText
如果结束
端接头
VBScript在错误上实现
的有趣之处在于,它不是全局的,实际上受范围限制。因此,如果在Sub或函数中应用“错误时恢复下一步”,然后输入一个新函数或关闭它的Sub,则该设置将在Sub或函数退出时恢复
在您的情况下,您的子运行
在错误恢复时设置,然后调用子显示customerror
,将错误转到0
。仅当您仍在DisplayCustomError
中时,此选项才适用。当由于错误而退出时,您的子运行
将继续,因为在该范围内,它仍然设置为on Error.Resume Next
在调用DisplayCustomError
下面是一个可以测试的VBS文件示例。如果运行此命令,将不会抛出任何内容,程序将显示消息“Done”。如果在Sub1
中取消对该行的注释,则会引发错误“Example 2”
您正在使用“下一步继续执行错误时的”
,这会使它忽略错误。删除它。@braX我试图在出错时删除Resume NextSub,它会引发异常,但它不会进入子显示CustomError(strMessage),当我第二次运行时,它会进入子显示CustomError(strMessage)找到一种方法来测试导致出现任何错误的条件,然后使用if语句来避免出现错误。根据错误的发生情况编写代码是一种不好的方式。我已将错误转到0并调用Err.Raise before DisplayCustomError(strMessage)并删除了WScript.Quit。现在它开始工作了,我想要它抛出错误。谢谢你的帮助。非常感谢。@DevendraVastrakar不客气!不要忘记单击投票按钮下方的勾号,将此答案标记为已接受。:)
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"