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

时间:2012-05-14 15:26:33

标签: excel-vba vba excel

从单元格中删除超链接也会删除格式。

Selection.Hyperlinks.Delete

有没有办法保留格式,或者我是否需要在删除超链接后重新应用它?

8 个答案:

答案 0 :(得分:3)

我发现解决方案是打电话

SET @query = 'bcp "SELECT Data FROM tempdb..##tblData ORDER BY ID" queryout C:\Data\MedicalPolicy.csv -c -t, -T -S' + @@servername
EXEC master..XP_CMDSHELL @query

而不是

Range.ClearHyperlinks

前者清除超链接并保持格式不变。参考此处:https://msdn.microsoft.com/en-us/library/office/ff194741.aspx

答案 1 :(得分:2)

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

Selection.Hyperlinks(1).Address = ""

这几乎就像没有超链接一样。唯一的区别是您的光标变为手而不是默认加号,但您仍然可以像任何其他单元格一样单击它。

答案 2 :(得分: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

答案 3 :(得分: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

告诉我一个更好的方法,我会接受你的回答作为答案。

答案 4 :(得分:1)

ActiveCell.Style = "Normal"

换句话说: 你重新应用应该存在的风格。而“正常”可以在Excell中存在的任何一种类型的名称中进行更改。如果您希望以这种方式应用自己的样式,请将其添加到单元格样式列表中。

如果你想更进一步。你可以在那里使用cellstyle,用字符串捕捉它并重新应用。

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

答案 5 :(得分: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

当您不想将粘贴信息复制到其他位置或从其他位置复制粘贴信息时,这也会有所帮助。没有在合并的单元格上尝试这个,但我想这应该可行。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

这里的缺点是当没有链接时光标会随着鼠标悬停而改变。最终用户可以移动形状并删除。