Vba 将值和颜色从一个工作簿复制到另一个工作簿,而不复制条件格式

Vba 将值和颜色从一个工作簿复制到另一个工作簿,而不复制条件格式,vba,excel,conditional-formatting,Vba,Excel,Conditional Formatting,我使用这行代码将一个工作簿的内容复制到另一个工作簿,但它只复制值(并避免获得#VALUE错误),但我也希望复制单元格的颜色: Workbooks("Payroll Data.xlsm").Worksheets("Pay-MR Compiled").Range("A" & Total_rows_PayMRCompiled + 1 & ":BD" & Total_rows_PayMRCompiled + Total_rows_PayMR - 1).Value = ThisWo

我使用这行代码将一个工作簿的内容复制到另一个工作簿,但它只复制值(并避免获得
#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
我的问题是,当我复制
值和源格式时
,它也会复制条件格式规则,因为我的条件是使用类似
NOT(ISFORMULA(A2))
的函数来检查单元格是否为公式,粘贴仅为值,所以所有单元格都将着色

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

但是使用
值和源格式粘贴时发生的情况是:


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

像这样试试

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

我认为没有条件格式就无法复制格式。
但是,您可以采用另一种方法:首先复制值和格式,然后删除条件格式

您的代码可能看起来像

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

如果目标上的颜色不同,则两个工作簿可能有不同的配色方案。了解如何复制颜色设置。

如果您清楚地理解了条件格式公式,可以尝试以下方法

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\u paymr compiled-1
行偏移量

trgtCell.Interior.ColorIndex=3
将在该范围内显示红色填充,但是
trgtCell.Interior.Color=srcCell.DisplayFormat.Interior.Color
将在所有复制的单元格上给我一个黑色填充,尽管源单元格不是黑色的。请告诉我们这里实际的条件格式是什么?这可能有助于找到原因。@Taazar编辑了它。如果范围中的单元格不是公式,条件将变为黄色。我相信这段代码会使
目标
范围的所有单元格都变为黄色,那么它会使
范围失去颜色吗?我的目标实际上是准确地复制
范围的配色方案,并按原样将其粘贴到
目标
范围中。唯一的区别是,它将仅粘贴为
目标
范围中的值,而不是
范围中的公式。“感兴趣的条件规则位于条件格式规则管理器“->的第4行,然后使用
Interior.Color=sourceRange.FormatConditions(4).内饰.颜色
对,抱歉。我看错了工作表,颜色方案如预期的那样是黄色。谢谢你
FormatConditions(4)
可以工作,但是转到第二期,我只需要在
源代码中着色的单元格在
目标代码中着色即可。”“我相信这段代码使目标范围的所有单元格都是黄色“->是的。2) “那么它会使源区域失去颜色?”->否,它会使地址与带有公式的源区域单元格对应的目标区域单元格失去颜色。我编辑了答案,因为我缺少
Total\u rows\u paymr compiled-1
row offsetI我已经测试了代码,我确实得到了单独的颜色,但前几列都是彩色的,如图所示:谢谢帮助。我删除了此行末尾的等号
Set destRange=Workbooks(“Payroll Data.xlsm”)。工作表(“Pay MR Compiled”)。范围(“A”&Total_rows\u PayMR Compiled+1&“:BD”&Total_rows\u PayMR Compiled+Total_rows\u PayMR-1)。Value=
但我在
此工作簿上得到一个下标错误。工作表(“Pay MR”)。范围(“A2:BD”复制
@DisplayName:Yes,但是使用自己的工作簿/工作表名称,在将代码改编为一种表单时犯了C&P错误,请更正它。@pherdini:请检查我的编辑,抱歉,在将我的测试代码改编为您的工作簿/工作表时犯了错误。如果在
副本中出现下标错误
,听起来好像sheetName中有错误(
“Pay MR”