【问题标题】:Can I use VBA to make Excel forget that it followed a hyperlink?我可以使用 VBA 让 Excel 忘记它跟随超链接吗?
【发布时间】:2020-02-06 18:02:13
【问题描述】:

我正在使用条件格式来影响表格中某些包含超链接的单元格的字体颜色。但是,当我点击超链接时,它会覆盖单元格中的条件格式,这是不受欢迎的。

如果当前单元格正上方的单元格具有相同的值,则条件格式实质上是使文本不可见。它使用适用于整个范围 ($C$6:$C$24) 的公式 (=C5=C6)。

我尝试过的事情:

  • 关闭并重新打开文件可以解决问题,因为它会重置所有 后面的超链接回到正常的超链接。然而,我不 想要一直关闭并重新打开。
  • 我可以使用Worksheet_FollowHyperlink 事件将字体颜色改回来,但是当我对表格进行不同的排序(从而改变条件格式的行为方式)时,条件格式是 仍然被禁用——现在支持以编程方式应用的字体 颜色。

这个问题本质上是对我之前的帖子 (Is there a way to make Conditional Formatting ignore the FollowedHyperlink flag?) 的更新。我不再使用HYPERLINK 公式,因为这不允许我使用答案中提供的Worksheet_FollowHyperlink 选项。

我还阅读了提供的 SuperUser 线程 (https://superuser.com/questions/728825/how-do-i-prevent-excel-from-changing-the-color-of-a-clicked-link/819931),它提供了一些其他有趣的途径来追求,但并没有完全让我到达我需要的地方。我现在特别问我是否可以重置 Excel 对哪些超链接被跟踪的记忆。

这是我想要的,在点击链接之前和之后:

这是我点击链接后的不良行为:

【问题讨论】:

  • 对不起...原文中的错字。 Worksheet_FollowHyperlink 事件是我尝试过的(不是原帖中提到的Worksheet_SelectionChange 事件......虽然我也尝试过)。
  • 这些超链接是指向 URL 还是指向工作簿中的位置?
  • 工作簿中的位置。第一列包含指向所列工作表中$A$1 的链接;表格和/或命名范围的第二列。
  • 我刚刚发现,如果我在“即时”窗口中输入 ?selection.style,紫色的“跟随超链接”单元格会应用“超链接”样式,如果我尝试,则会应用蓝色 (“12673797”) ?selection.font.color...即使我在屏幕上清楚地看到紫色。如果不更改字体的样式或颜色,Excel 如何将这些显示为紫色?
  • 使用?selection.displayformat.style?selection.displayformat.font.color 也是如此。

标签: excel vba conditional-formatting


【解决方案1】:

您尚未透露您在 CF 中使用的格式,但我猜它会将文本颜色设置为白色。

隐藏单元格内容的更好的通用格式是;;;。如果你在你的 CF 中使用它,那么后面的超链接将保持隐藏

【讨论】:

  • 使用白色使文本消失在背景中是完全正确的。你在哪里输入;;;
  • 有趣。我喜欢它隐藏内容;但是,如果我再次点击该链接,最终会出现错误:“无法打开指定的文件。”
  • @rmbradburn 你通过条件格式对话框输入它。重新报错,和格式没有关系,一定和你的超链接有关
  • 谢谢。明天我会深入研究它。奇怪的是,我更改为您建议的格式后才发生错误。当我删除它并返回只使用白色字体时,错误不再发生。明天我会多踢一点,看看我能不能弄明白。感谢您的建议!
  • 原来我已经编辑了@BigBen 的 VBA,因为我正在思考它。已删除 .Address 部分。即使在那之后,我发誓它仍在使用 CF 更改字体颜色,但不适用于 ;;;,即使这没有任何意义。无论如何,现在都已修复并使用;;; 正常运行。感谢您的帮助!
【解决方案2】:

类似下面的东西似乎可以保持超链接的样式不变 - 基本上只是将超链接重新添加到同一个单元格:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    With Target
        .Range.Hyperlinks.Add .Range, .Address, .SubAddress, , .TextToDisplay
    End With
End Sub

ScreenTip 引起了问题,所以我故意省略了它 - 我测试它的超链接没有屏幕提示。

如果这确实适用于您的情况,为了使其更健壮,我会在尝试在Hyperlinks.Add 中使用它们之前测试SubAddressScreenTipTextToDisplay 的长度。它们都是可选参数,点击的超链接可能没有这些属性开头。

【讨论】:

  • 到目前为止,这似乎最接近我正在寻找的东西。它基本上重置了超链接,而没有真正为单元格指定任何不同的格式。我希望有一种方法可以直接与 Excel 为跟随的超链接所具有的任何标志进行交互,但这似乎是至少间接地进行交互的方式。谢谢!
【解决方案3】:

这对我有用,并且不会干扰条件格式:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

    With Target.Range
        .Font.Color = vbBlue
        .Font.Underline = True
    End With

End Sub

【讨论】:

    【解决方案4】:

    所以,这是我刚刚想出的解决方法……终于。仍然不是最佳答案,并且仍然没有回答如何让 Excel 忘记它遵循特定链接的具体问题,所以我仍然希望看到更好的答案。

    但这完成了我想要完成的事情......大部分时间。

    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    
        Target.Range.Style = "Followed Hyperlink"
    
    End Sub
    

    使用上面的代码将样式设置为“Followed Hyperlink”,出乎意料地成功了。正如在之前的 cmets 中所指出的,Excel 并没有使用这种样式,即使它看起来是这样。使用 VBA 手动设置显然可以使条件格式起作用。

    缺点:关闭和打开工作簿不再重置颜色。一种解决方法是将“Followed Hyperlink”样式更改为与“Hyperlink”样式相同,但整个工作簿中的任何链接都不会具有紫色。所以,这仍然不是最佳答案。

    编辑:我应该明确指出,使用此选项会应用“Followed Hyperlink”样式(紫色文本)。但是,它不会覆盖条件格式,这是问题的最大部分。

    【讨论】:

    • 您将条件格式设置为什么颜色? (我用白色让文字消失。)
    • 哦,我错过了您使用条件格式...对不起。
    • 是的,这是本次调查的关键要素。上面的答案确实使文本变成紫色,但它并没有像我在原始问题中遇到的那样覆盖条件格式。这允许条件格式仍然可以使重复的单元格“不可见”(白色文本)。
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多