仅复制条件格式

Copy only conditional formatting

我正在努力解决看似相当简单的问题。我正在尝试将 just 一个单元格的条件格式规则复制到另一个单元格。我在这里搜索过类似的问题:

1) Copy Format Conditions from one cell to another?

和其他地方:

1) https://www.ozgrid.com/forum/forum/help-forums/excel-general/9956-solved-macro-to-copy-conditional-formatting

2) https://www.mrexcel.com/forum/excel-questions/369089-vba-copy-conditional-formatting.html

...但大多数答案往往只是说使用 .PasteSpecial xlPasteFormats,10 次中有 9 次可以完成这项工作,但并不是我正在尝试做的事情的真实答案(请参阅评论来自用户的 SO 问题:"This also copies more than just the conditional formatting but I can deal with it").

我正在尝试从一个单元格中获取条件格式设置规则,并将它们应用于另一个格式与标准格式不同的单元格。从这组 .PasteSpecial 枚举的示例来看,没有一个可以完成确切的工作 - xlPasteAllMergingConditionalFormats 看起来很接近,但我实际上不想将任何内容从一个单元格粘贴到另一个单元格。

尝试了一些无望的猜测,例如:

For Each cond In rng1.FormatConditions rng2.FormatConditions.Add (cond) Next cond

但我知道它需要的不止于此...感谢任何帮助!

这是一个有点廉价的技巧 (a.k.a。"The Swap"),但它应该有效。假设您只关心以下属性:

  • Font.Name
  • Font.Size
  • Interior.Color

因此,在复制单元格之前,您可以简单地记住"hiddenRange"中的属性。因此,您可以简单地将 copyRange 复制到 hiddenRange,然后使用 xlPasteAllMerginingConditionalFormatscopyRange 复制到 pasteRange,然后调用 pasteRange 来自 hiddenRange

看到比解释好一点:

Option Explicit

Sub TestMe()

    Dim hiddenRange As Range
    Dim copyRange   As Range
    Dim pasteRange  As Range

    Set hiddenRange = Range("A1")
    Set copyRange = Range("B2")
    Set pasteRange = Range("B3")

    pasteRange.Copy hiddenRange
    copyRange.Copy
    pasteRange.PasteSpecial Paste:=xlPasteAllMergingConditionalFormats

    With pasteRange
        .Font.Name = hiddenRange.Font.Name
        .Font.Size = hiddenRange.Font.Size
        .Interior.Color = hiddenRange.Interior.Color
    End With

    hiddenRange.Clear
    Application.CutCopyMode = False

End Sub