在VBA中调用多变量函数 - 用于重定向的URL检查器

时间:2017-10-24 11:52:19

标签: vba url

以下代码由Justin Dearing在此发布: url checker VBA, when redirected, show redirected url

然而,我怎么能称这个函数返回T / F和目标呢?我尝试了各种方式(调用,直接请求等)并继续得到编译错误,无效使用对象。

如果我将函数剪切为:Public Function GetResult(strUrl As String)As Boolean

这会返回301或302的T / F,但不会返回目标。

调用此函数以获取isRedirect True / False AND 目标重定向的正确方法是什么?我错过了什么?

任何指针都表示赞赏。乙

Public Function GetResult(ByVal strUrl As String, Optional ByRef isRedirect As Boolean, Optional ByRef target As String) As String
Dim oHttp As New WinHttp.WinHttpRequest

oHttp.Option(WinHttpRequestOption_EnableRedirects) = False
oHttp.Open "HEAD", strUrl, False
oHttp.send
GetResult = oHttp.Status & " " & oHttp.statusText
If oHttp.Status = 301 Or oHttp.Status = 302 Then
    isRedirect = True
    target = oHttp.getResponseHeader("Location")
Else
    isRedirect = False
    target = Nothing
End If
End Function

1 个答案:

答案 0 :(得分:1)

试试这个,看看是否有效。

Option explicit

Public Function GetResult(ByVal strUrl As String, Optional ByRef isRedirect As Boolean, Optional ByRef target As String) As String
Dim oHttp As WinHttp.WinHttpRequest
Set oHttp = new winhttp.winhttprequest

With ohttp
.Option(WinHttpRequestOption_EnableRedirects) = False
.Open "HEAD", strUrl, False
.send

GetResult = .Status & " " & .statusText

If .Status = 301 Or .Status = 302 Then
isRedirect = True
target = .getResponseHeader("Location")
Else 
isRedirect = False 
target = vbnullstring
End If 

End with

End Function

未经测试并写在手机上,抱歉格式不正确。

请注意,我不使用 Dim ...作为新的语法。相反,我使用 dim 设置

希望它有效。让我知道你是怎么过的。

我的理解是你希望函数返回多个值。传递参数ByRef是实现此目的的一种解决方法。另一种方法可能是返回单个分隔的字符串,然后在所选的分隔符上使用split()。或者返回变体。