【问题标题】:VBA List of Hyperlinks for Named ranges in Workbook工作簿中命名范围的 VBA 超链接列表
【发布时间】:2017-09-25 14:30:39
【问题描述】:

我正在尝试创建 VBA 代码来识别我的工作簿中的命名范围并为每个范围创建一个超链接。这些超链接需要能够被复制到其他文档。

我找到了两个示例——每个都完成了一半的工作,但在组合它们时遇到了麻烦:

1) 查找并列出范围:

Sub namedranges()

For Each n In ThisWorkbook.Names
    i = i + 1
    Range("a" & i + 1) = n.Name
Next n

End Sub

2) 创建所有工作表的超链接:

Sub CreateLinksToAllSheets()

Dim sh As Worksheet
Dim cell As Range
For Each sh In ActiveWorkbook.Worksheets
    If ActiveSheet.Name <> sh.Name Then
        ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="",   SubAddress:="'" & sh.Name & "'" & "!A1", TextToDisplay:=sh.Name
        ActiveCell.Offset(1, 0).Select
    End If
Next sh

End Sub

当我如下组合时,我得到一个对象/变量未设置的错误。

Sub hyperlinknamedranges()

Dim sh as worksheet
Dim cell as range
For Each n in Thisworkbook.names
    ' ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="",    SubAddress:="'" & sh.Name & "'" & "#" & "'" & n.name & "'", 
    ActiveCell.Offset(1, 0).Select
next n

End Sub

最终代码不需要像第一个示例中那样生成范围列表。

【问题讨论】:

    标签: vba excel hyperlink named-ranges


    【解决方案1】:

    我认为您正在寻找类似下面的代码,它将在“A”列(从第 2 行开始)的每个单元格中添加命名范围的名称,并且一旦您单击 @ 就会链接到它987654321@.

    代码

    Option Explicit
    
    Sub namedranges()
    
    Dim n As Name
    Dim i As Long
    
    i = 2
    For Each n In ThisWorkbook.Names
        Range("A" & i).Hyperlinks.Add Anchor:=Range("A" & i), Address:="", SubAddress:=n.RefersTo, TextToDisplay:=n.Name
        i = i + 1
    Next n
    
    End Sub
    

    【讨论】:

    • 这与我正在寻找的非常接近——感谢您的回复。如果我将超链接从源文件复制到目标文件,那么超链接会将我引导到目标文件上的类似范围,而不是源文件上的原始命名范围。关于如何超链接回源工作簿上的原始命名范围的任何想法?
    • @Learner 不确定我是否理解,此代码是否应该被定向到另一个工作簿中的命名范围?
    • 嗨。我希望代码引用原始命名范围。如果该范围位于 FileA.xlsm#NamedRange,当我将超链接从 FileA.xlsm 复制到 FileB.xlsm 时,我希望它引用 FileA 中的命名范围。
    • 嗨。谢谢你的帮助。我添加了一个字符串来命名工作簿和路径,然后将其插入到超链接语句中。像冠军一样工作。
    【解决方案2】:
    Sheet2.Select
    
    Range("a1").Select
    
    Dim nm As Name
    
      For Each nm In Names
    
        ActiveCell.Value = nm.Name
    
        ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:="", SubAddress:= _
        nm.RefersTo
    
        ActiveCell.Offset(1, 0).Select
    
      Next nm
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2021-09-30
      • 2022-01-24
      相关资源
      最近更新 更多