Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Excel VBA删除超链接时,如何保留单元格格式?_Excel_Vba - Fatal编程技术网

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

使用Excel VBA删除超链接时,如何保留单元格格式?,excel,vba,Excel,Vba,从单元格中删除超链接也会删除格式设置 Selection.Hyperlinks.Delete 是否有办法保留格式,或者在删除超链接后需要重新应用格式?我不知道如何防止格式被破坏。我想出的解决方法是在删除超链接之前复制单元格,然后在删除超链接后将格式粘贴回单元格: ' copy cell to remote location to "remember" formatting ActiveCell.Copy Sheets("Templates").Range("a1") ' remove hyp

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

Selection.Hyperlinks.Delete

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

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

' 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

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

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

Selection.Hyperlinks(1).Address = ""
这就像没有超链接一样。唯一的区别是,光标变为手形而不是默认的加号,但您仍然可以像单击任何其他单元格一样单击它

ActiveCell.Style = "Normal"
换言之: 重新应用应该存在的样式。而“正常”可以在Excell中出现的任一单元格样式的名称中更改。如果希望以这种方式应用自己的样式,请将其添加到cellstyles列表中

如果你想更进一步。您可以将已经存在的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

如果使用合并的单元格,上述解决方案会出现问题。 这个方法解决了这个问题

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

还可以将超链接应用于透明形状,并覆盖所需超链接的单元格

这里的缺点是,光标在未链接时会随鼠标移动而改变。最终用户可以移动形状,也可以删除形状

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

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

我发现解决方案是调用

Range.ClearHyperlinks
而不是

Range.Hyperlinks.Delete

前者清除超链接并保持格式不变。这里的参考资料:

Ben,我会仔细研究一下,看看它是否适合我。谢谢不客气!希望对你有用。如果你也有什么想法,请告诉我。这是一个有趣的问题。在这种情况下,我实际上需要删除超链接。不过我喜欢你的想法,我会把它加入我的魔术袋。再次感谢。Excel 2003中是否定义了
ClearHyperlinks
Range.Hyperlinks.Delete