Копировать значения и цвета из одной книги в другую без копирования условного форматирования - PullRequest
0 голосов
/ 04 сентября 2018

Я использую эту строку кода для копирования содержимого одной рабочей книги в другую, но она только копирует значения (и избегает ошибок #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 голосов
/ 09 октября 2018

Я думаю, что нет способа скопировать форматирование без условного форматирования.
Однако вы можете пойти другим путем: сначала скопируйте значения и форматирование, а затем удалите условное форматирование.

Ваш код может выглядеть как

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, как копировать настройки цвета.

0 голосов
/ 09 октября 2018

В соответствии с формулой условного форматирования, которую вы пояснили, вы можете попробовать это

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 в целевой диапазон

0 голосов
/ 04 сентября 2018

Этого можно добиться, используя метод .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
...