【问题标题】:Stop Excel from Following Hyperlinks阻止 Excel 跟踪超链接
【发布时间】:2017-12-21 19:57:08
【问题描述】:

是否可以在 Excel 中停止跟随超链接?我非常愿意使用宏和其他方法。经过数小时的搜索,我发现了以下类型的“解决方案”,但它们不起作用:

  1. 使用 Selection.Hyperlinks.Delete 禁用所有超链接
  2. 让 Excel 关闭自动超链接
  3. 有一个虚拟表,其中包含链接到自身的超链接,并使用 VBA 激活后续操作

这些不起作用,因为我不拥有工作表。我的工作是使用用户公式或子程序自动执行我的同事的报告/操作/计算。工作表的所有者在文件中包含许多他们希望保留的链接。我不能随意删除他们的链接。但是对我来说,故障排除和编程很困难,因为我有时(不经常,我通常使用键盘导航,但有时)不小心点击了一个链接,并且会出现弹出窗口和所有垃圾。我也不能创建一个虚拟表,因为工作表包含大约 10,000 行数据,我担心它会增加文件大小。任何帮助,将不胜感激!谢谢!

【问题讨论】:

  • 此信息非常少,不足以回答您的问题。请添加一些(示例)数据的屏幕截图。或者更详细地描述工作表:固定列、固定行中的超链接是否伴随着其他类型的标识符?
  • 您会在用户之间来回传递此工作簿吗?保存实际超链接和链接回当前单元格的可见超链接的屏幕提示选项看起来像是重新设计的部分。
  • @Luuklag 如果缺少数据,我很抱歉。实际上,这不是针对一个特定的工作簿,而只是处理一般的超链接。但通常,超链接位于固定列中。他们链接它的方式也是手动链接的,所以我不能只是将其删除并稍后自动添加(即不是网站地址或邮件地址)
  • @QHarr 是的,恐怕工作簿通常在用户之间传递很多。

标签: excel vba


【解决方案1】:

我假设您想在处理文件时暂时禁用超链接,然后在完成后重新启用它们。一种可能的解决方案是将它们存储在单独的临时表中。

 Sub DisableLinks()
  Dim ws As Worksheet
  Dim ts As Worksheet
  Set ts = ActiveSheet
  Set ws = Worksheets.Add(after:=ts)

  Dim hylink As Hyperlink
  Dim destlink As Hyperlink
   For Each hylink In ts.Hyperlinks
        If hylink.Range.Value <> "" Then
            ws.Range(hylink.Range.Address) = hylink.Range.Value
            If hylink.SubAddress = "" Then

               Set destlink = ws.Hyperlinks.Add(anchor:=ws.Range(hylink.Range.Address), Address:=hylink.Address, TextToDisplay:=hylink.TextToDisplay)

            Else
                ws.Hyperlinks.Add anchor:=ws.Range(hylink.Range.Address), Address:=hylink.Address, SubAddress:=hylink.SubAddress, TextToDisplay:=hylink.TextToDisplay

            End If
        hylink.Delete
         End If
    Next hylink
    ws.Visible = xlVeryHidden
End Sub

Sub RestoreLinks()
 Dim ws As Worksheet
  Dim ts As Worksheet
  Set ts = ActiveSheet
  Set ws = Worksheets(ts.Index + 1)

  ws.Visible = xlSheetVisible
  Dim hylink As Hyperlink
   For Each hylink In ws.Hyperlinks
        If hylink.Range.Value <> "" Then
            If hylink.SubAddress = "" Then

               ts.Hyperlinks.Add anchor:=ts.Range(hylink.Range.Address), Address:=hylink.Address, TextToDisplay:=hylink.TextToDisplay
            Else
                ts.Hyperlinks.Add anchor:=ts.Range(hylink.Range.Address), Address:=hylink.Address, SubAddress:=hylink.SubAddress, TextToDisplay:=hylink.TextToDisplay

            End If
        hylink.Delete
         End If
    Next hylink

    ws.Delete
End Sub

【讨论】:

  • 我现在休假了。但这似乎是一种非常聪明的方法。这实际上是迄今为止满足我要求的第一个建议(不是某个范围或表格 .hyperlinks.delete 哈哈)。一旦我开始尝试这个,我会回复你的。提前致谢!
【解决方案2】:

这将从您选择的选择中删除超链接。

Sub removelinks()

  Dim rng As Range

  For Each r In Selection
    rng.Hyperlinks.Delete
  Next

End Sub

【讨论】:

  • 我不会为每个循环都使用一个循环,像ActiveSheet.Hyperlinks.Delete 这样的循环会快得多
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 2023-03-17
  • 2021-06-26
  • 2015-07-05
  • 2011-06-26
  • 2017-10-06
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多