VBA删除超链接会重置格式

VBA删除超链接会重置格式,vba,excel,hyperlink,Vba,Excel,Hyperlink,我有一个vba sub,它的设计目的是用超链接功能替换单元格超链接。但是,currentCell.Hyperlinks.Delete行会重置所有单元格格式(字体、字号、粗体、下划线、单元格边框、对齐方式等)。除了手动复制每个单元格属性,然后在删除超链接后重置属性外,是否有其他方法可以防止它执行此操作?另外,设置单元格公式似乎也会重置字体,但如果这是唯一一个出错的属性,我可以处理它 Sub Test() Dim currentCell As Range Dim directoryBase As

我有一个vba sub,它的设计目的是用超链接功能替换单元格超链接。但是,currentCell.Hyperlinks.Delete行会重置所有单元格格式(字体、字号、粗体、下划线、单元格边框、对齐方式等)。除了手动复制每个单元格属性,然后在删除超链接后重置属性外,是否有其他方法可以防止它执行此操作?另外,设置单元格公式似乎也会重置字体,但如果这是唯一一个出错的属性,我可以处理它

Sub Test()

Dim currentCell As Range
Dim directoryBase As String

directoryBase = "\\examplePath\"

For Each currentCell In Worksheets(2).UsedRange.Cells

    If currentCell.Hyperlinks.Count > 0 Then
        currentCell.Formula = "=HYPERLINK("" + directoryBase + currentCell.Hyperlinks(1).Address + "",""ü"")"
        currentCell.Hyperlinks.Delete
        Debug.Print currentCell.Address
    End If


Next currentCell

End Sub

谢谢

以下是Matteo在代码中的建议(使用辅助单元格):


只需在r.Hyperlinks之后将公式生成器插入循环。删除

我发现解决方案是调用

Range.ClearHyperlinks
而不是

Range.Hyperlinks.Delete
前者清除超链接并保持格式不变。此处参考:

我要做的是:1)复制之前单元格的格式;2) 执行你的行动;3) 将单元格的格式粘贴到修改后的格式中。要做到这一点,在手动执行此操作的同时录制一个宏,并让代码使其适应For循环就足够了。谢谢。那个辅助细胞是关键。先前尝试复制和粘贴格式,但超链接.Delete正在清除剪贴板。我必须添加的一件事是mergeRangeAddress=r.MergeArea.Address,后跟Range(mergeRangeAddress)。粘贴格式后进行合并,因为此工作簿的合并单元格非常糟糕。此外,在我的情况下,公式生成器依赖于单元格中的超链接,因此它必须位于r.hyperlinks.Delete之前,而不是之后
Range.Hyperlinks.Delete