【问题标题】:Copy values and colors from one workbook to another without copying conditional formatting将值和颜色从一个工作簿复制到另一个工作簿,而不复制条件格式
【发布时间】:2018-09-04 07:20:10
【问题描述】:

我使用这行代码将一个工作簿的内容复制到另一个工作簿,但它只复制值(并避免出现#VALUE 错误),但我希望也复制单元格的颜色:

Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR Compiled").Range("A" & Total_rows_PayMRCompiled + 1 & ":BD" & Total_rows_PayMRCompiled + Total_rows_PayMR - 1).Value = ThisWorkbook.Worksheets("Pay-MR").Range("A2:BD" & Total_rows_PayMR).Value

我的问题是,当我复制Values & Source Formatting 时,它也会复制条件格式规则,因为我的条件是使用类似NOT(ISFORMULA(A2)) 的函数来检查单元格是否是公式,并且粘贴只是值, 都将被着色。

例如,实际数据中只有1个单元格突出显示,如下所示:

但是使用Values and Source Formatting 粘贴时会发生什么:

【问题讨论】:

  • 您能告诉我们这里发生的实际条件格式是什么吗?这可能有助于找出原因。
  • @Taazar 对其进行了编辑,如果范围内的单元格不是公式,则条件将着色为黄色。

标签: vba excel conditional-formatting


【解决方案1】:

站在你说清楚的条件格式公式,你可以试试这个

Set sourceRange = ThisWorkbook.Worksheets("Pay-MR").Range("A2:BD" & Total_rows_PayMR)        
With Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR Compiled").Range(sourceRange.Address).Offset(Total_rows_PayMRCompiled - 1) ' reference "target" range
    .Value = sourceRange.Value ' paste "source" range values to referenced (i.e. "target") range
    .Interior.Color = sourceRange.FormatConditions(1).Interior.Color ' color referenced (i.e. "target") range with conditional formatting color
    .Parent.Range(sourceRange.SpecialCells(xlCellTypeFormulas).Offset(Total_rows_PayMRCompiled - 1).Address).Interior.Pattern = xlNone 'clear the color of "target" sheet range corresponding to "source" range cells with formulas 
End With

如果您的“源”范围条件格式有多个公式,则只需将FormatConditions(1). 中的1 更改为正确的格式条件项号。


已编辑以在目标范围内添加 Total_rows_PayMRCompiled - 1 行偏移量

【讨论】:

  • 我相信这段代码会使target 范围内的所有单元格都变成黄色,然后它会使source 范围失去颜色?我的目标实际上是完全复制source 范围的配色方案并将其粘贴到target 范围内。唯一的区别是,它不会粘贴 source 范围内的公式,而只会粘贴为 target 范围内的值。
  • "感兴趣的条件规则位于条件格式规则管理器的第 4 行" -> 然后使用Interior.Color = sourceRange.FormatConditions(4).Interior.Color
  • 对,对不起。我正在查看错误的工作表,配色方案如预期的那样是黄色的。谢谢FormatConditions(4) 有效,但是转到第二期,我只需要在source 中着色的单元格在target 中着色。
  • 1) “我相信这段代码使目标范围的所有单元格都变成黄色” -> 是的。 2)“那么它会使源范围失去颜色吗?” -> 不,它会使地址对应于具有公式的源范围单元格的目标范围单元格失去颜色。我编辑了答案,因为我错过了 Total_rows_PayMRCompiled - 1 行偏移量
  • 我已经测试了代码,我确实得到了孤立的颜色,但前几列都是彩色的,如图所示:imgur.com/a/znpwqIK
【解决方案2】:

我认为没有条件格式就无法复制格式。
但是,您可以反过来:首先复制值和格式,然后删除条件格式。

你的代码可能看起来像

Dim destRange as Range
Set destRange = Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR Compiled").Range("A" & Total_rows_PayMRCompiled + 1 & ":BD" & Total_rows_PayMRCompiled + Total_rows_PayMR - 1)

ThisWorkbook.Worksheets("Pay-MR").Range("A2:BD" & Total_rows_PayMR).Copy
destRange.PasteSpecial Paste:=xlPasteValues
destRange.PasteSpecial Paste:=xlPasteFormats
destRange.FormatConditions.Delete

如果目标上的颜色显示不同,则两个工作簿的配色方案可能不同。看看https://stackoverflow.com/a/37423390/7599798如何复制颜色设置。

【讨论】:

  • 感谢您的帮助。我删除了此行末尾的等号Set destRange = Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR Compiled").Range("A" & Total_rows_PayMRCompiled + 1 & ":BD" & Total_rows_PayMRCompiled + Total_rows_PayMR - 1).Value =,但在ThisWorkbook.Worksheets("Pay-MR").Range("A2:BD" & Total_rows_PayMR).Copy 上出现下标错误
  • @DisplayName:是的,但是有自己的工作簿/工作表名称,在将代码调整为单一表单 OP 时犯了 C&P 错误 - 已更正。
  • @Pherdiny:请检查我的编辑,抱歉,在将我的测试代码调整到您的工作簿/工作表时出错。如果您在Copy 处收到下标错误,则听起来好像sheetName 中有错误("Pay-MR"
【解决方案3】:

您可以通过使用.DisplayFormat 方法来实现这一点。检查here

这样试试

Set trgtCell = Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR").Range("A2")
Set srcCell = ThisWorkbook.Worksheets("Pay-MR").Range("A2")

trgtCell.Value = srcCell.Value
trgtCell.Font.FontStyle = srcCell.DisplayFormat.Font.FontStyle
trgtCell.Interior.Color = srcCell.DisplayFormat.Interior.Color
trgtCell.Font.Strikethrough = srcCell.DisplayFormat.Font.Strikethrough
trgtCell.Font.Color = srcCell.DisplayFormat.Font.Color

【讨论】:

  • trgtCell.Interior.ColorIndex = 3 会给我一个红色填充范围,但trgtCell.Interior.Color = srcCell.DisplayFormat.Interior.Color 会给我一个黑色填充所有复制的单元格,尽管源单元格不是黑色的。
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 2014-12-09
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多