仅复制条件格式

时间:2018-02-06 16:35:51

标签: excel vba excel-vba formatting conditional-formatting

我正在努力寻找看似相当简单的事情。我正在尝试将只是单元格的条件格式设置规则复制到另一个。我在这里搜索过类似的问题:

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,其中9次中有9次完成工作,但不是我想要做的事情的真实答案(请参阅评论来自用户在SO问题上:"这也复制了不仅仅是条件格式,但我可以处理它")。

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

尝试了几个无望的猜测:

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

但是我知道它需要更多......任何帮助都赞赏!

1 个答案:

答案 0 :(得分:1)

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

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

因此,在复制单元格之前,您可以简单地记住“hiddenRange”中的属性。因此,您只需将copyRange复制到hiddenRange,然后使用copyRangepasteRange复制到xlPasteAllMerginingConditionalFormats,然后重新调用pasteRange的正确属性来自hiddenRange的{​​1}}。

看到它比解释好一点:

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