我可以使用 VBA 使 Excel 忘记它跟随超链接吗?
Can I use VBA to make Excel forget that it followed a hyperlink?
我正在使用条件格式来影响 table 中包含 hyperlink 的某些单元格的字体颜色。但是,当我遵循 hyperlink 时,它会覆盖单元格中的条件格式,这是不需要的。
条件格式实质上是在当前单元格正上方的单元格具有相同值时使文本不可见。它使用应用于整个范围 ($C:$C
) 的公式 (=C5=C6
)。
我尝试过的事情:
- 关闭并重新打开文件可以解决问题,因为它会重置所有
随后的 hyperlinks 恢复正常 hyperlinks。然而,我不
想要一直关闭并重新打开。
- 我可以使用
Worksheet_FollowHyperlink
事件将字体颜色改回来,但是当我对 table 进行不同排序时(从而改变条件格式的行为方式),条件格式是
仍然禁用——现在支持以编程方式应用的字体
颜色.
这个问题本质上是我之前post(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 的记忆,其中 hyperlink 已被关注。
这是我想要的,点击之前和之后 link:
这是我在单击 link:
后得到的不良行为
所以,这是我刚刚想出的解决方法...终于。仍然不是最佳答案,并且仍然没有回答如何让 Excel 忘记它遵循特定 link 的具体问题,所以我仍然希望看到更好的答案。
但是这已经完成了我想完成的...大部分。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Target.Range.Style = "Followed Hyperlink"
End Sub
使用上面的代码将样式设置为 "Followed Hyperlink",效果出人意料。正如之前的评论所述,Excel 并没有使用这种风格,即使它看起来是这样。使用 VBA 手动设置显然允许条件格式起作用。
缺点:关闭和打开工作簿不再重置颜色。解决方法是将 "Followed Hyperlink" 样式更改为与 "Hyperlink" 样式相同,但整个工作簿中没有 link 具有紫色。所以,这仍然不是最佳答案。
编辑:我应该明确表示,使用此选项会应用 "Followed Hyperlink" 样式(紫色文本)。不过,它不会覆盖条件格式,这是问题的最大部分。
像下面这样的东西似乎可以保持超链接的样式不变——基本上只是将超链接重新添加到同一个单元格:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With Target
.Range.Hyperlinks.Add .Range, .Address, .SubAddress, , .TextToDisplay
End With
End Sub
ScreenTip
导致了问题,所以我故意省略了它 - 我测试它的超链接没有屏幕提示。
如果这确实适用于您的情况,为了使其更健壮,我会在尝试使用它们之前测试 SubAddress
、ScreenTip
和 TextToDisplay
的长度在 Hyperlinks.Add
。它们都是可选参数,点击的超链接可能没有这些属性开头。
这对我有用并且不影响条件格式:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With Target.Range
.Font.Color = vbBlue
.Font.Underline = True
End With
End Sub
您没有透露您在 CF 中使用的格式,但我猜它会将文本颜色设置为白色。
用于隐藏单元格内容的更好的通用格式是 ;;;
。如果你在你的 CF 中使用它,那么后面的超链接将保持隐藏状态
我正在使用条件格式来影响 table 中包含 hyperlink 的某些单元格的字体颜色。但是,当我遵循 hyperlink 时,它会覆盖单元格中的条件格式,这是不需要的。
条件格式实质上是在当前单元格正上方的单元格具有相同值时使文本不可见。它使用应用于整个范围 ($C:$C
) 的公式 (=C5=C6
)。
我尝试过的事情:
- 关闭并重新打开文件可以解决问题,因为它会重置所有 随后的 hyperlinks 恢复正常 hyperlinks。然而,我不 想要一直关闭并重新打开。
- 我可以使用
Worksheet_FollowHyperlink
事件将字体颜色改回来,但是当我对 table 进行不同排序时(从而改变条件格式的行为方式),条件格式是 仍然禁用——现在支持以编程方式应用的字体 颜色.
这个问题本质上是我之前post(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 的记忆,其中 hyperlink 已被关注。
这是我想要的,点击之前和之后 link:
这是我在单击 link:
后得到的不良行为所以,这是我刚刚想出的解决方法...终于。仍然不是最佳答案,并且仍然没有回答如何让 Excel 忘记它遵循特定 link 的具体问题,所以我仍然希望看到更好的答案。
但是这已经完成了我想完成的...大部分。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Target.Range.Style = "Followed Hyperlink"
End Sub
使用上面的代码将样式设置为 "Followed Hyperlink",效果出人意料。正如之前的评论所述,Excel 并没有使用这种风格,即使它看起来是这样。使用 VBA 手动设置显然允许条件格式起作用。
缺点:关闭和打开工作簿不再重置颜色。解决方法是将 "Followed Hyperlink" 样式更改为与 "Hyperlink" 样式相同,但整个工作簿中没有 link 具有紫色。所以,这仍然不是最佳答案。
编辑:我应该明确表示,使用此选项会应用 "Followed Hyperlink" 样式(紫色文本)。不过,它不会覆盖条件格式,这是问题的最大部分。
像下面这样的东西似乎可以保持超链接的样式不变——基本上只是将超链接重新添加到同一个单元格:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With Target
.Range.Hyperlinks.Add .Range, .Address, .SubAddress, , .TextToDisplay
End With
End Sub
ScreenTip
导致了问题,所以我故意省略了它 - 我测试它的超链接没有屏幕提示。
如果这确实适用于您的情况,为了使其更健壮,我会在尝试使用它们之前测试 SubAddress
、ScreenTip
和 TextToDisplay
的长度在 Hyperlinks.Add
。它们都是可选参数,点击的超链接可能没有这些属性开头。
这对我有用并且不影响条件格式:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With Target.Range
.Font.Color = vbBlue
.Font.Underline = True
End With
End Sub
您没有透露您在 CF 中使用的格式,但我猜它会将文本颜色设置为白色。
用于隐藏单元格内容的更好的通用格式是 ;;;
。如果你在你的 CF 中使用它,那么后面的超链接将保持隐藏状态