如何在使用Excel VBA删除超链接时保留单元格格式?

6
从单元格中删除超链接也会删除格式。
Selection.Hyperlinks.Delete

是否有一种方法可以保留格式,还是我需要在删除超链接后重新应用它?

8个回答

8

在Excel 2003中是否定义了“ClearHyperlinks”? - George Robinson

2

我知道这有点奇怪...不确定你是否会接受。试试这个:

Selection.Hyperlinks(1).Address = ""

这基本上就像没有超链接一样。唯一的区别是你的光标会变成手形,而不是默认的加号,但你仍然可以像点击其他单元格一样点击它。


本,我会尝试玩弄一下看看它是否适合我。谢谢! - Jon Crowell
不用谢!希望对你有所帮助。如果你有任何其他问题,请告诉我。这是一个有趣的问题。 - Ben Strombeck
在这种情况下,我实际上需要删除超链接。不过,我喜欢你的想法,并会把它加入我的技巧库中。再次感谢。 - Jon Crowell

2

如果您使用合并单元格,上述解决方案可能会出现问题。以下方法可以解决该问题。

data = Selection.value
Selection.Value = ""                            'this removes the hyperlink
Selection.Font.Underline = xlUnderlineStyleNone 'remove the hyperlink underlining
With ActiveCell.Font                            'replace hyperlink blue with black
   .ThemeColor = xlThemeColorLight1
   .TintAndShade = 0
End With
Selection.Value = data

1
For Each cll In Selection
    cll_val = cll.Value
    cll.ClearContents
    cll.Value = cll_val
    With cll.Font
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .Underline = xlUnderlineStyleNone
    End With
Next

这也有助于您在不希望复制/粘贴信息到/从另一个位置时使用。我还没有在合并的单元格上尝试过,但我猜应该可以工作。

1

我无法想出如何防止格式被删除。我想到的解决方法是在删除超链接之前复制单元格,然后在删除超链接后将格式粘贴回单元格:

' copy cell to remote location to "remember" formatting
ActiveCell.Copy Sheets("Templates").Range("a1")

' remove hyperlink
ActiveCell.Hyperlinks.Delete

' reapply formatting
Sheets("Templates").Range("A1").Copy
ActiveCell.PasteSpecial Paste:=xlPasteFormats

展示给我更好的做法,我会接受你的回答作为答案。

1
ActiveCell.Style = "Normal"

用其他话说: 重新应用应该存在的样式。而“Normal”可以更改为Excell中存在的任何单元格样式的名称。如果您希望以这种方式应用自己的样式,请将其添加到单元格样式列表中。
如果您想进一步进行,可以获取已经存在的单元格样式,将其捕获到字符串中并重新应用。
Dim sStyleName as String
sStyleName = ActiveCell.Style 'Capture the current cellstyle
ActiveCell.Hyperlinks.Delete  'Remove the hyperlink
ActiveCell.Style = sStylename 'Reapply the cellstyle used before

0

您还可以将超链接应用于透明的形状,并覆盖您想要添加超链接的单元格。

这里的缺点是,当未链接时,光标会随鼠标悬停而改变。并且该形状可以被最终用户移动和删除。


0
Dim temp As Variant
temp = (RangeObject).Interior.Color
(RangeObject).Hyperlinks.Delete
(RangeObject).Interior.Color = temp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接