【问题标题】:VBA deleting Hyperlinks Resets FormattingVBA 删除超链接重置格式
【发布时间】:2017-01-27 19:58:18
【问题描述】:

我有这个 vba 子程序,旨在用 HYPERLINK 函数替换单元格超链接。但是,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

谢谢

【问题讨论】:

  • 我要做的是:1)复制之前的单元格格式; 2) 执行您的操作; 3)将单元格的格式粘贴到修改后的格式中。为此,在手动执行此操作的同时录制宏并获取代码以使其适应您的 For 循环就足够了。

标签: vba excel hyperlink


【解决方案1】:

这是 Matteo 的代码建议(使用辅助单元):

Sub dural()
    Dim r As Range, helper As Range
    Set helper = Range("Z100")
    For Each r In ActiveSheet.UsedRange
        If r.Hyperlinks.Count > 0 Then
            If Intersect(r, helper) Is Nothing Then
                r.Copy helper
                r.Hyperlinks.Delete
                helper.Copy
                r.PasteSpecial (xlPasteFormats)
            End If
        End If
    Next r
End Sub

只需将您的公式生成器插入到 r.Hyperlinks.Delete

之后的循环中

【讨论】:

  • 谢谢。那个辅助细胞是关键。之前试图复制和粘贴格式,但 Hyperlinks.Delete 正在清除剪贴板。我必须添加的一件事是 mergeRangeAddress = r.MergeArea.Address 后跟 Range(mergeRangeAddress).Merge 粘贴格式后,因为这个工作簿与合并的单元格很糟糕。
  • 另外,在我的例子中,公式生成器依赖于单元格中的超链接,所以它必须在 r.Hyperlinks.Delete 之前而不是之后
【解决方案2】:

我发现解决方案是调用

Range.ClearHyperlinks

而不是

Range.Hyperlinks.Delete

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

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2013-03-08
    • 2012-02-13
    • 2014-10-12
    • 2021-07-02
    • 2021-06-20
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多