我有一个使用网址并返回响应的Excel VBA函数(源: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编辑器会 pop 一个错误对话框。
Run-time error '-2147467259 (80004005)': Uspecified error
我希望函数不以 pop 对话框的形式将错误消息作为字符串返回。有没有办法将服务器错误作为字符串返回(无需多次执行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
但这并不是我想要的。我想返回真实的运行时错误消息(例如:来自服务器的错误)。
最佳答案
这很简单:
GetHTTP = "Problem with URL or server: " & Err.Number & " " & Err.Description
这是全部功能: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 = "Problem with URL or server: " & Err.Number & " " & Err.Description
End Function
关于excel - 从函数返回服务器错误为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62584612/