打开时超链接会更改地址

Hyperlink changes address when opening

提问人:Hashah 提问时间:11/9/2023 最后编辑:Hashah 更新时间:11/9/2023 访问量:105

问:

超链接 im Excel 数据: HTTPS://apply.d.co.uk/JobDetail/9467 但是当我点击它时,地址是: HTTPS://apply.d.co.uk/Error

我尝试检查 URL 是否正确,它总是说是,但是当我打开它时,它会发生变化并在地址中显示错误。

我使用了这个功能:

Function URLExists(url As String) As Boolean
    Dim Request As Object
    Dim ff As Integer
    Dim rc As Variant

    On Error GoTo EndNow
    Set Request = CreateObject("WinHttp.WinHttpRequest.5.1")

    With Request
      .Open "GET", url, False
      .Send
      rc = .StatusText
    End With
    Set Request = Nothing
    If rc = "OK" Then URLExists = True

    Exit Function
EndNow:
End Function

我只需要一个解决方案,这样我就不需要打开每个超链接来检查它是否显示错误。

////// 从高处到下面的解决方案有效!enter image description here

Excel VBA 超链接

评论

0赞 Hashah 11/9/2023
我不希望你打开链接。这些是与工作相关的,并且已经过修改以显示我遇到的问题的示例。
0赞 BigBen 11/9/2023
即使是这样,你的问题似乎也与编程无关,除非你想测试每个超链接......在这种情况下,请说明这一点,并分享你所做的研究以及你到目前为止尝试过的代码。
0赞 CDP1802 11/9/2023
我尝试检查 URL 是否正确 - 你是怎么做到的?
0赞 Hashah 11/9/2023
我使用了在stackoverflow上找到的函数:Function URLExists(url As String) As Boolean Dim Request As Object Dim ff As Integer Dim rc As Variant On Error GoTo EndNow Set Request = CreateObject(“WinHttp.WinHttpRequest.5.1”) with Request .打开 “GET”, url, False 。发送 rc = .StatusText End with set request = Nothing 如果 rc = “OK” then URLExists = true 退出函数 EndNow:结束函数

答:

1赞 taller 11/9/2023 #1

CheckConn返回 HTTP 状态代码和重定向的 URL。如果 URL 不可访问,则 HTTP 状态代码将为 0。

Public Function CheckConn(sURL) As String
    Const WHR_EnableRedirects = 6
    Const WHR_URL = 1
    Dim oXmlHttp As Object, nRetVal As Integer
    On Error Resume Next
    Set oXmlHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    oXmlHttp.Option(WHR_EnableRedirects) = True
    oXmlHttp.Open "HEAD", sURL, False
    oXmlHttp.setRequestHeader "Content-Type", "text/xml"
    oXmlHttp.send ""
    nRetVal = oXmlHttp.Status
    CheckConn = "Status: " & nRetVal & ", Redirect URL:" & oXmlHttp.Option(WHR_URL)
    Set oXmlHttp = Nothing
    On Error GoTo 0
End Function
Sub demo()
    Dim sU As String
    sU = "HTTPS://apply.d.co.uk/JobDetail/9467"
    Debug.Print (CheckConn(sU))
    sU = "https://www.youtube.com/shorts/w3-yM1IjuB0"
    Debug.Print (CheckConn(sU))
End Sub

评论

0赞 Hashah 11/9/2023
谢谢,它显示两个站点的“200”。问题是超链接打开,但地址从“JobDetail/9467”更改为“Error”
0赞 taller 11/9/2023
我无法访问您的网址。它在我的电脑上返回 0。所以我无法追踪它是如何变成错误的。
0赞 Hashah 11/9/2023
是否有可能在代码中添加一行以返回其地址?例如。您检查 URL 是否有效:google.com 然后返回“200”和地址?(在这种情况下,这应该是相同的,但在我的情况下,它将显示带有错误 Word 的那个)
0赞 taller 11/9/2023
是的。我已经更新了代码。
0赞 Hashah 11/9/2023
有没有办法得到最终地址?打开一些内部站点时,首先链接以“/Login”结尾,但随后它会自动登录并显示“JobDetail/1946”(这是正确的)或再次显示“/Error”,我需要该最终地址。但该函数仅返回“/Login”部分,即初始地址。