excel - 从函数返回服务器错误为字符串?

标签 excel vba http error-handling excel-2016

我有一个使用网址并返回响应的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/

相关文章:

excel - VBA Excel - 删除具有特定关键字的行上方的 2 行

excel - 如何删除 VBA-Excel 中的重复行和倒序重复行

excel - 如果系统时间在开始时间到结束时间之间每10分钟自动运行一次宏VBA excel

excel - 将excel的新动态数组功能与VBA相结合

vba - MS Access VBA 代码编辑器字符编码和复制/粘贴

java - HttpURLConnection 设置 POST 参数 URL

python - 使用 Node js 快速服务器调用 python 脚本

c# - 在 ServiceStack 中使用 IRestClient 发出 HEAD 请求

vba - 在 Excel 中选择 ActiveCell 行的第 1 至 10 列

excel - 为细胞着色的另一种更快的方法