【问题标题】:Hyperlink directs to hidden row超链接指向隐藏行
【发布时间】:2015-06-13 08:45:54
【问题描述】:

我有一个有 2 张纸的工作簿。工作表 1 具有指向工作表 2 中几个不同单元格的超链接。问题是工作表 2 中有过滤器会隐藏行,因此当您尝试从工作表 1 访问超链接时,该行被隐藏,您看不到目标。我正在尝试弄清楚如何执行以下操作:

  • 单击超链接时,确定工作表 2 中的目标行
  • 如果目标行已隐藏,请取消隐藏工作表 2 中的目标行,然后点击超链接。

点击超链接后它可以保持不隐藏,我很好。在过去的几天里,我一直在为此苦苦挣扎,但没有取得任何成功。我已经尝试过“Followhyperlink”功能,但我认为这为时已晚 - 它已经跟随超链接,因此在此时取消隐藏该行为时已晚。

有什么建议吗?我被难住了!

【问题讨论】:

  • 您可以使用类似于“on_click_hyperlink”的事件处理程序。抱歉,我无法详细说明,但您可以在 Google 上快速搜索“超链接事件”以获取更多详细信息。

标签: vba excel hyperlink


【解决方案1】:

FollowHyperlink 确实是要使用的事件处理程序。将此代码放在 Sheet1 的工作表模块中:

Option Explicit

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

Dim hyperlinkParts() As String

If ((Target.Type = msoHyperlinkRange) And (Target.SubAddress <> "")) Then
    If (InStr(Target.SubAddress, "!") > 0) Then
        hyperlinkParts = Split(Target.SubAddress, "!")

        If ((Left$(hyperlinkParts(0), 1) = "'") And (Right$(hyperlinkParts(0), 1) = "'")) Then
            hyperlinkParts(0) = Mid$(hyperlinkParts(0), 2, Len(hyperlinkParts(0)) - 2)
        End If

        Worksheets(hyperlinkParts(0)).Range(hyperlinkParts(1)).EntireRow.Hidden = False
    End If
End If

End Sub

这会检查超链接是否对应于 Range 对象,然后将目标地址拆分为工作表名称和特定单元格。然后它会取消隐藏与目标地址对应的行。

对于指向未指定特定单元格的外部工作簿的超链接,需要检查子地址是否为空

编辑:此方法不适用于指向命名范围的超链接,我已更改代码以避免收到带有此类超链接的错误消息

edit2; 修改代码以处理包含先前导致错误的空格的工作表名称

【讨论】:

  • 感谢您的帮助!不幸的是,它给了我一个运行时错误“9”:下标超出范围。 “Worksheets(hyperlink....)”行是罪魁祸首。hyperlinkParts(0) 指向正确的工作表,而 hyperlinkParts(1) 指向正确的行。我不确定什么超出了范围。从逻辑上讲,代码完全有意义。如果您有任何进一步的想法,我们将不胜感激。
  • 出现错误时hyperlinkParts(0)hyperlinkParts(1)的具体值是多少? Hyperlink.SubAddress 上的文档不是很广泛,所以可能有一些我没有考虑到的特定格式的子地址
  • “所有数据”(这是目标链接的工作表名称)和 H2684(目标链接的单元格)。如果我单击不同的链接(大约有一百个链接),再次出现上述格式的正确地址。有 21,233 行数据。不确定这是否会有所不同?
  • 希望现在已修复 - 请参阅答案中的更新代码。问题是,因为“所有数据”在工作表名称中有一个空格,所以最终在子地址中用单引号字符 - 'All data' 括起来。这会导致 Worksheets 函数无法识别名称,从而发生错误。修改后的代码去除了工作表名称周围的单引号字符
  • 哇。是的,现在已经解决了。非常抱歉,我对原始问题没有更具体,也没有给出实际的工作表名称。谢谢谢谢。 :D
猜你喜欢
  • 2013-04-16
  • 2011-10-04
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多