【发布时间】:2020-10-16 10:58:49
【问题描述】:
我有一个 Excel VBA 函数,它接受一个 URL 并返回一个响应(来源:getHTTP with VBA?)。
response = GetHTTP(.ListColumns(colNameURL).DataBodyRange(n).Value)
...
Public Function GetHTTP(ByVal url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False: .Send
GetHTTP = StrConv(.responseBody, vbUnicode)
End With
End Function
函数按预期工作。
但是,如果 URL 出现问题(例如服务器停机),则 VBA 编辑器会弹出一个错误对话框。
Run-time error '-2147467259 (80004005)': Uspecified error
我希望函数将错误消息作为字符串返回,而不是弹出对话框。
有没有办法将服务器错误作为字符串返回(无需多次进行 HTTP 调用)?
我尝试过的:
我可以让函数返回一个预定义的错误消息(来自一个常量)。
Public Const InvalidURL = "Problem with URL or Server"
Public Function GetHTTP(ByVal url As String) As String
On Error GoTo ConnectionError:
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False: .Send
GetHTTP = VBA.StrConv(.responseBody, vbUnicode)
End With
On Error GoTo 0
Exit Function
ConnectionError:
GetHTTP = InvalidURL
End Function
但这并不是我想要的。我想返回真正的运行时错误信息(例如:来自服务器的错误)。
【问题讨论】:
-
您需要在
Open()调用周围包装一个错误处理程序
标签: excel vba http error-handling excel-2016