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

时间:2018-09-04 07:20:10

标签: excel vba excel-vba 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 = ThisWorkbook.Worksheets("Pay-MR").Range("A2:BD" & Total_rows_PayMR).Value

我的问题是,当我复制Values & Source Formatting时,它还会复制条件格式设置规则,并且由于我的条件正在使用类似NOT(ISFORMULA(A2))的函数来检查单元格是否为公式,因此粘贴仅是值,所有值将被着色。

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

Before copy

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

After copy

3 个答案:

答案 0 :(得分:1)

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

您的代码可能看起来像

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如何复制颜色设置。

答案 1 :(得分: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

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


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

答案 2 :(得分:0)

您可以使用.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