首页 文章

Excel VBA获取特定单元格的超链接地址

提问于
浏览
1

如何编写Excel VBA以检索特定单元格中超链接的URL /地址?

我正在处理我的工作簿的sheet2,它包含大约300行 . 每行在“AD”列处都有唯一的超链接 . 我想要的是循环“J”列中的每个空白单元格,并将其值从空白更改为其“AD”列单元格的超链接URL . 我目前正在使用此代码:

do while....
    NextToFill = Sheet2.Range("J1").End(xlDown).Offset(1).Address
    On Error Resume Next
    GetAddress = Sheet2.Range("AD" & Sheet2.Range(NextToFill).Row).Hyperlinks(1).Address
    On Error GoTo 0
loop

上面代码的问题是它总是得到第一个超链接的地址,因为代码是 .Hyperlinks(1).Address . 无论如何通过范围地址获取超链接地址,如 sheet1.range("AD32").Hyperlinks.Address

3 回答

  • 0

    这应该工作:

    Dim r As Long, h As Hyperlink
    For r = 1 To Range("AD1").End(xlDown).Row
        For Each h In ActiveSheet.Hyperlinks
            If Cells(r, "AD").Address = h.Range.Address Then
                Cells(r, "J") = h.Address
            End If
        Next h
    Next r
    

    这有点令人困惑,因为Range.Address与Hyperlink.Address(这是你的URL)完全不同,声明你的类型会有很大帮助 . 这是将“Option Explicit”放在模块顶部的另一种情况 .

  • 0

    我从评论中理解的是,您已经将列J设置为URL的字符串 . 如果是这样,这个简单的脚本应该完成这项工作(它会将单元格超链接到单元格内指定的地址,如果您愿意,可以通过更改textToDisplay选项来更改单元格文本) . 如果我误解了这个并且字符串在AD列中,只需计算出AD的列号并替换以下行:

    fileLink = Cells(i, the number of column AD)
    

    剧本:

    Sub AddHyperlink()
    
    Dim fileLink As String
    
    Application.ScreenUpdating = False
    
    With ActiveSheet
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    
    
    For i = 4 To lastrow
    
        fileLink = Cells(i, 10)
    
        .Hyperlinks.Add Anchor:=Cells(i, 10), _
        Address:=fileLink, _
        TextToDisplay:=fileLink
    
    Next i
    
    End With
    
    Application.ScreenUpdating = True
    
    End Sub
    
  • 2

    尝试为每个循环运行如下:

    do while....
        NextToFill = Sheet2.Range("J1").End(xlDown).Offset(1).Address
        On Error Resume Next
        **for each** lnk in Sheet2.Range("AD" & Sheet2.Range(NextToFill).Row).Hyperlinks
             GetAddress=lnk.Address
        next
    On Error GoTo 0
    loop
    

相关问题