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' –