【问题标题】:Referencing a dynamic cell in VBA function for creating an Index of Worksheet with that same name引用 VBA 函数中的动态单元格以创建具有相同名称的工作表索引
【发布时间】:2018-03-09 23:16:28
【问题描述】:

我有 3 个工作表:目录、工作表生成器和工作表 1。

“工作表生成器”工作表是创建唯一工作表名称的地方,我们将唯一工作表称为“工作表 1”。在生成“表 1”时,宏还将唯一名称“表 1”输入到“目录”工作表的新行中。

这个过程发生了很多很多次,我最终可以得到 30 个新的唯一命名的工作表。

目前我正在手动向这些工作表添加一个超链接,这样我就可以更快地跳转到每个工作表,而不是水平滚动几天。我想将生成唯一名称的宏添加到“目录”中,并添加一个指向该工作表的超链接,这样我就不必再手动进行操作了。

当“目录”在单元格 A3 中写入“表 1”时,手动操作看起来像这样。

Sub TestINDEX2()

Range("A3").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "'Sheet 1'!ac", TextToDisplay:="Sheet 1"

End Sub

工作表的唯一名称在“工作表生成器”工作表的单元格“NB2”中生成。但是超链接需要在“目录”工作表的单元格“A3”中。

我希望它这样做:

Sub TestINDEX2()

Range("A3").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "'Sheet Generator'!NB2", TextToDisplay:="'Sheet Generator'!NB2"

End Sub

但是,这显然是行不通的......

有关如何将动态单元格引用到添加超链接的宏中的任何建议?

【问题讨论】:

    标签: vba excel dynamic


    【解决方案1】:

    我想这就是你要找的东西:

    Dim wb As Workbook
    Dim wsToC As Worksheet
    Dim wsGen As Worksheet
    Dim rDest as Range
    
    Set wb = ActiveWorkbook
    Set wsToC = wb.Sheets("Table of Contents")
    Set wsGen = wb.Sheets("Sheet Generator")
    Set rDest = wsToC.Cells(wsToC.Rows.Count, "A").End(xlUp).Offset(1)
    If rDest.Row < 3 Then Set rDest = wsToC.Range("A3")
    
    wsToC.Hyperlinks.Add Anchor:=rDest, _
                         Address:="", _
                         SubAddress:="'" & wsGen.Range("NB2").Text & "'!A3", _
                         TextToDisplay:=wsGen.Range("NB2").Text
    

    【讨论】:

    • 感谢您的评论,这是我一直在寻找的正确逻辑。我唯一需要补充的是,你是如何做到的,它会从 A3 向下填充超链接?
    【解决方案2】:

    假设工作表名称列表位于单元格 A3 向下的“工作表生成器”工作表中,您可以试试这个:

    Option Explicit
    
    Sub BuildHyperlinks()
        Dim cell As Range
        With Worksheets("Sheet Generator")
            For Each cell In .Range("A3", .Cells(.Rows.Count, 1).End(xlUp))
                ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
                "'" & cell.Value2 & "'!A1", TextToDisplay:=cell.value
            Next
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多