Private Sub Workbook_Open()
on error goto Oops
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
exit sub
Oops:
'handle error here
End Sub
如果你想,例如,更改URL,因爲錯誤的,你可以做到這一點
Private Sub Workbook_Open()
on error goto Oops
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
Send:
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
exit sub
Oops:
'handle error here
URL="new URL"
resume Send 'risk of endless loop if the new URL is also bad
End Sub
而且,如果你感覺真的嘗試/上口,你可以模仿這樣的。
Private Sub Workbook_Open()
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
on error resume next 'be very careful with this, it ignores all errors
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
if err <> 0 then
'not 0 means it errored, handle it here
err.clear 'keep in mind this doesn't reset the error handler, any code after this will still ignore errors
end if
End Sub
而延伸的這是真的很難核心...
Private Sub Workbook_Open()
version = "1.0"
on error resume next
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
if err <> 0 then
'unable to create object, give up
err.clear
exit sub
end if
URL = "<WEB SERVICE>"
objHTTP.Open "POST", URL, False
if err <> 0 then
'unable to open request, give up
err.clear
exit sub
end if
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
if err <> 0 then
'unable to send request, give up
err.clear
exit sub
end if
End Sub
另外值得注意的是,在一個on error goto
風格發生任何錯誤都不能處理,所以,如果你這樣做
private sub MakeError()
dim iTemp as integer
on error goto Oops
iTemp = 5/0 'divide by 0 error
exit sub
Oops:
itemp = 4/0 'unhandled exception, divide by 0 error
end sub
會引起未處理的異常,但是
private sub MakeError()
dim iTemp as integer
on error resume next
iTemp = 5/0 'divide by 0 error
if err <> 0 then
err.clear
iTemp = 4/0 'divide by 0 error, but still ignored
if err <> 0 then
'another error
end if
end if
end sub
不會導致任何異常,因爲VBA全都忽略它們。
這全部包含在[錯誤處理](https://stackoverflow.com/documentation/vba/3211/error-handling#t=201706192005424139825)文檔主題中。 –
我在下面發佈了答案。但是,作爲一個側面說明。當你的代碼不應該使用全局變量時。或者你忘了聲明你的變量。 VBA將允許你使用變量,但如果你這樣做,它很難維持。 添加到您的代碼的開頭,在版本 ' dim URL as string' 'dim objHTTP as object' –