Excel VBA中Winhttp.Winhttprequest上的#Value错误

时间:2014-08-07 19:25:10

标签: vba

我已经编写了一些代码来检索url,但是我收到了#Value错误。这段代码有什么不对,

Public Function Rurl(ByVal URL As String)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Option(WinHttpRequestOption_UserAgentString) = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
http.Option(WinHttpRequestOption_EnableRedirects) = True

If Not InStr(URL, "://") > 0 Then URL = "http://" & URL

http.Open "GET", URL
http.Send
Rurl = http.GetResponseHeader("Location")
Set http = Nothing
End function

1 个答案:

答案 0 :(得分:1)

你不会说出你收到错误的地方,所以我会在这条线上假设它:

Rurl = http.GetResponseHeader("Location")

要问问自己:如果提供的网址没有重定向,您的代码会做什么?

答案是,您的代码会在上面的代码行中出现错误,您在代码中的任何位置都无法处理,很可能会导致您发现#VALUE!错误。

我建议添加一些错误检查,以确保您的功能适用于所有情况。所以,试一试:

Public Function Rurl(ByVal URL As String)

  On Error GoTo ErrorHandler

  Dim http As Object
  Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
  http.Option(WinHttpRequestOption_UserAgentString) = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
  http.Option(WinHttpRequestOption_EnableRedirects) = True

  If Not InStr(URL, "://") > 0 Then URL = "http://" & URL

  http.Open "GET", URL
  http.Send
  Rurl = http.GetResponseHeader("Location")
  Set http = Nothing

  Exit Function

ErrorHandler:
  Rurl = "" ' or you can say something like: "No redirection".
  Resume Next

End Function

如果函数中的任何地方发生错误,错误处理程序会将函数的返回值设置为合理的,清理并退出函数。如果没有错误发生,一切都应该像以前一样工作。我们只是添加了一些代码来处理潜在的错误。