繁体   English   中英

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

[英]Excel VBA Get hyperlink address of specific cell

如何编写 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

这应该有效:

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”放在模块顶部会有所帮助的另一种情况。

不知道为什么我们做大事,代码很简单

Sub ExtractURL()
    Dim GetURL As String
    For i = 3 To 500
        If IsEmpty(Cells(i, 1)) = False Then
            Sheets("Sheet2").Range("D" & i).Value = 
               Sheets("Sheet2").Range("A" & i).Hyperlinks(1).Address
        End If
    Next i
End Sub

我从评论中了解到您已经将列 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

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

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

这个 IMO 应该是一个函数来返回这样的字符串。

Public Sub TestHyperLink()
 Dim CellRng As Range
 Set CellRng = Range("B3")
 
 Dim HyperLinkURLStr As String
 HyperLinkURLStr = HyperLinkURLFromCell(CellRng)
 Debug.Print HyperLinkURLStr
End Sub

Public Function HyperLinkURLFromCell(CellRng As Range) As String
 HyperLinkURLFromCell = CStr(CellRng.Hyperlinks(1).Address)
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM