【问题标题】:Copy only conditional formatting仅复制条件格式
【发布时间】:2018-02-06 16:35:50
【问题描述】:

我正在为一些看起来相当简单的事情而苦苦挣扎。我正在尝试将 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问题:“这不仅复制了条件格式,而且我可以处理它”)。

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

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

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

但我知道它需要的远不止这些...任何帮助表示赞赏!

【问题讨论】:

  • 粘贴特殊对话框确实有一个名为“所有合并条件格式”的选项,对你有用吗?
  • 是的,我在我的问题中提到了这一点,但它不太正确.. 如此接近.. 但不仅仅是条件格式规则。请参阅下面 Vityata 答案的 cmets 中的更多详细信息。干杯

标签: vba excel formatting conditional-formatting


【解决方案1】:

这有点便宜(又名“The Swap”),但应该可以。假设您只关心以下属性:

  • 字体名称
  • 字体大小
  • 内饰.颜色

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

看比解释好一点:

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

【讨论】:

  • 不幸的是,这不仅仅是复制条件格式。我测试了它,你也可以尝试 - 使用蓝色背景的 B2,字体 Algerian 大小 15,黄色背景的 B3,字体 Arial Black大小 12。当您复制格式规则时,B3 会完美地采用该规则,但是当条件不满足时(即当没有发生任何事情并且我希望单元格看起来“标准”时),B3 采用与相同的格式B2 - 它失去了黄色背景、Arial Black 字体和字体大小。我希望这是有道理的
  • 我测试了一下,得出的结论是 AllMergingConditionalFormats 不是您需要的,因为它所做的是粘贴复制单元格的结果格式,因为该单元格显示它,它不会粘贴条件格式化自己。因此,我希望实现您所需的唯一方法是为新范围复制整个 CF 规则。如果您在手动更新应用 CF 规则的范围记录宏,您将看到宏记录器记录: 1. 删除范围的现有 CF 规则。 2. 将 CF 规则重新应用到新范围。
  • @jkpieterse - 实际上它完全复制了条件格式。这很奇怪,因为当我第一次阅读您的评论时,我已经尝试过了,它似乎根本没有复制。现在我再次尝试,它完全按照应有的方式复制格式。您是否尝试过我的代码中的B2B3B2 是之前实现格式的单元格,B3 应该在代码运行后才能获得格式。
  • 奇怪的是,我尝试使用一个小的示例工作簿手动进行(而不是使用 VBA 代码!),当使用 hte all merging conditional formatting option手动粘贴时,它同时粘贴了值和结果格式,但不是 CF 规则本身。
猜你喜欢
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多