Sort dead hyperlinks in Excel with VBA?

前端 未结 2 622
慢半拍i
慢半拍i 2020-12-05 06:08

The title says it:

I have an excel Sheet with an column full of hyperlinks. Now I want that an VBA Script checks which hyperlinks are dead or work and makes an entry

相关标签:
2条回答
  • 2020-12-05 06:32

    First add a reference to Microsoft XML V3 (or above), using Tools->References. Then paste this code:

    Option Explicit
    
    Sub CheckHyperlinks()
    
        Dim oColumn As Range
        Set oColumn = GetColumn() ' replace this with code to get the relevant column
    
        Dim oCell As Range
        For Each oCell In oColumn.Cells
    
            If oCell.Hyperlinks.Count > 0 Then
    
                Dim oHyperlink As Hyperlink
                Set oHyperlink = oCell.Hyperlinks(1) ' I assume only 1 hyperlink per cell
    
                Dim strResult As String
                strResult = GetResult(oHyperlink.Address)
    
                oCell.Offset(0, 1).Value = strResult
    
            End If
    
        Next oCell
    
    
    End Sub
    
    Private Function GetResult(ByVal strUrl As String) As String
    
        On Error Goto ErrorHandler
    
        Dim oHttp As New MSXML2.XMLHTTP30
    
        oHttp.Open "HEAD", strUrl, False
        oHttp.send
    
        GetResult = oHttp.Status & " " & oHttp.statusText
    
        Exit Function
    
    ErrorHandler:
        GetResult = "Error: " & Err.Description
    
    End Function
    
    Private Function GetColumn() As Range
        Set GetColumn = ActiveWorkbook.Worksheets(1).Range("A:A")
    End Function
    
    0 讨论(0)
  • 2020-12-05 06:54

    Gary's code is perfect, but I would rather use a public function in a module and use it in a cell as function. The advantage is that you can use it in a cell of your choice or anyother more complex function.

    In the code below I have adjusted Gary's code to return a boolean and you can then use this output in an =IF(CHECKHYPERLINK(A1);"OK";"FAILED"). Alternatively you could return an Integer and return the status itself (eg.: =IF(CHECKHYPERLINK(A1)=200;"OK";"FAILED"))

    A1: http://www.whatever.com
    A2: =IF(CHECKHYPERLINK(A1);"OK";"FAILED")

    To use this code please follow Gary's instructions and additionally add a module to the workbook (right click on the VBAProject --> Insert --> Module) and paste the code into the module.

    
    Option Explicit
    
    Public Function CheckHyperlink(ByVal strUrl As String) As Boolean
    
        Dim oHttp As New MSXML2.XMLHTTP30
    
        On Error GoTo ErrorHandler
        oHttp.Open "HEAD", strUrl, False
        oHttp.send
    
        If Not oHttp.Status = 200 Then CheckHyperlink = False Else CheckHyperlink = True
    
        Exit Function
    
    ErrorHandler:
        CheckHyperlink = False
    End Function
    
    

    Please also be aware that, if the page is down, the timeout can be long.

    0 讨论(0)
提交回复
热议问题