【问题标题】:Return server error from function as string?从函数返回服务器错误作为字符串?
【发布时间】: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


【解决方案1】:

这很简单:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2012-03-28
    • 2018-03-14
    • 1970-01-01
    • 2019-04-03
    • 2014-08-24
    相关资源
    最近更新 更多