【问题标题】:VBA - how to hyperlink multiple cells in another worksheetVBA - 如何在另一个工作表中超链接多个单元格
【发布时间】:2020-08-08 14:37:31
【问题描述】:

我正在尝试将单元格从一个 Excel 工作表链接到另一个工作表。例如,在单元格 Sheet1!A1 中,我有一个超链接,我想链接到 Sheet3!A3、A5、A20。我已经能够使用以下方法链接到同一张工作表中的多个单元格:A3、A5、A20,但不能链接到另一个工作表。

举个例子,我一直这样做:

ActiveSheet.HyperLinks.Add Range("A" & i), address:="", SubAddress:="'" & Sheet3.Name & "'!A3,A5,A20", TextToDisplay:=Cells(i, 1).Text

但是,这仅在我编写链接到与超链接相同的工作表 (sheet3) 中的单元格的超链接时有效。当我尝试像这样在不同的工作表中超链接单元格时,此方法不起作用:

ActiveSheet.HyperLinks.Add Range("A" & i), address:="", SubAddress:="'" & Sheet1.Name & "'!A3,A5,A20", TextToDisplay:=Cells(i, 1).Text

请注意,我更改的只是工作表#。 有没有解决的办法?还是简单的不可能。我知道我可以像 A5:A10 那样链接另一个工作表中的多个单元格,但这不是我的目标。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    当您要查找新工作表时,您必须将工作表放在每个参考文献的前面。当你只把它放在第一个时,就像同时说“Go to sheet1!A1 and Sheet2!A10”一样,这是行不通的。它在同一张纸上工作,因为不合格的引用指向与合格的同一张纸。这是一个例子。

    Sub test()
        
        Sheet2.Hyperlinks.Add _
            Sheet2.Range("F10"), Address:="", SubAddress:="'" & Sheet1.Name & "'!A3," & "'" & Sheet1.Name & "'!A5," & "'" & Sheet1.Name & "'!A20", _
            TextToDisplay:=Sheet1.Cells(1, 1).Text
        
    End Sub
    

    我的不像你那样处于循环中,但我认为你可以适应。如果没有,请回帖,我可以进一步提供帮助。

    【讨论】:

    • 它工作得几乎完美,但是如果我添加超过 11 个单元格,我似乎会遇到错误:参考无效。如果我输入这样的字符串:SubAddress:="'Documentation'!$D$83,'Documentation'!$D$84,'Documentation'!$D$85,'Documentation'!$D$86,'Documentation'!$ D$87,'文档'!$D$95,'文档'!$D$89,'文档'!$D$90,'文档'!$D$91,'文档'!$D$92,'文档'!$D$101 " 它可以工作,但如果我再添加一个单元格引用,它会给我一个错误。
    • 这个错误似乎是由于参数本身的字符限制引起的,有没有办法解决这个问题?
    • @user3880490 这是您问题的答案,您应该接受它。完成研究后,绕过字符限制可能会成为另一个好问题
    【解决方案2】:

    请尝试下一个解决方案。它仅使用超链接来调用能够从超链接TextToDisplay 中提取工作表和范围的函数:

    1. 在标准模块中复制下一个Sub(以创建超链接)。也可以手动创建超链接:
    Sub testCreateHyperlink()
       ActiveSheet.Hyperlinks.Add Anchor:=Range("a20"), Address:="", _
             ScreenTip:="Select discontinue range in anohter sheet", _
                             TextToDisplay:="Documentation|A4,A7,A8,A15,B20"
    End Sub
    

    可以创建许多这样的超链接。实际规则为第 1 列中的超链接运行宏,但可以根据需要轻松调整代码。

    1. 在存在超链接的工作表模块中,复制下一个事件代码:
    Option Explicit
    
    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
        If Target.Range.Column = 1 Then
            Dim sh As Worksheet
    
            Set sh = Worksheets(Split(Target.Range.Value, "|")(0)): sh.Activate
            sh.Range(Split(Target.Range.Value, "|")(1)).Select
        End If
    End Sub
    
    1. 单击上面创建的超链接,将在单击的单元格TextToDisplay 超链接保留的组合“工作表名称|范围”中进行选择。

    这样,保存范围地址的字符串可以更长(不需要每个连续范围的工作表名称,加上连接字符)。如果达到了 256 个字符的限制,我也在想办法解决这个问题……

    1. 为了在创建超链接时快速/轻松地填充TextToDisplay,可以想象一些功能。下一个从选定的单元格创建必要的字符串:
    Private Function strSelTextToD() As String
        Dim sh As Worksheet: Set sh = ActiveSheet
        
        strSelTextToD = sh.Name & "|" & Selection.Address(0, 0)
    End Function
    

    然后,从具有内部绿色 (65280) 的单元格创建它:

    Private Function strTextToD() As String
       Dim sh As Worksheet, Cel As Range, rng As Range
       Set sh = ActiveSheet
       For Each Cel In sh.UsedRange.cells
            If Cel.Interior.Color = vbGreen Then
               If rng Is Nothing Then
                    Set rng = Cel
               Else
                    Set rng = Union(rng, Cel)
               End If
            End If
       Next
       If Not rng Is Nothing Then strTextToD = sh.Name & "|" & rng.Address(0, 0)
    End Function
    

    上面两个函数可以用下一种方式调用:

    Sub testStrHypTTD()
     Dim strToDisp As String
      strToDisp = strSelTextToD: Debug.Print strToDisp
      strToDisp = strTextToD: Debug.Print strToDisp
    End Sub
    

    而且返回的字符串可以简单的使用,在Sub创建超链接,像这样:

    '...
    TextToDisplay:=strSelTextToD
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2017-09-29
      相关资源
      最近更新 更多