vba excel как вставить значения без форматирования шрифта / цвета / bg color
Вопрос
У меня есть макрос для копирования сводной строки из каждой серии листов.Итоговая строка специально отформатирована шрифтом / цветом шрифта / цветом bg, но при вставке в "таблицу суммирования" в нее нужно просто вставлять значения без форматирования.
For LoopIndex = StartIndex To EndIndex
' start in a task sheet
Sheets(LoopIndex).Select
CopiedCells = ActiveSheet.Range("A156:L156").Copy
' now move to Summary sheet
Sheets("Summary Sheet").Select
ActiveSheet.Range("A8").Select
ActiveCell.EntireRow.Insert
ActiveCell.PasteSpecial Paste:=xlPasteValues
' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone
Application.CutCopyMode = False ' clears clipboard
Next LoopIndex
Все исследования, которые я провел, говорят, что PastSpecial, xlValues, xlPasteValues должны работать, но ничто не изменяет форматирование, не знаю, что я здесь делаю не так.Он вставляет значения, а не ссылочные значения, так что это хорошо.У меня есть макрос для сброса форматирования в цикле, но я хотел бы сделать его более эффективным.Я использую Excel 2007.
Решение
Это действительно странно!
Причина в том, что вы копируете, Вставляете, а затем вставляете.Попробуйте Вставить, Скопировать, а затем Вставить:
'we must commence on the Summary Sheet
Sheets("Summary Sheet").Select
For LoopIndex = StartIndex To EndIndex
' insert the row before we start
ActiveSheet.Range("A8").Select
ActiveCell.EntireRow.Insert
' select the task sheet
Sheets(LoopIndex).Select
CopiedCells = ActiveSheet.Range("A156:L156").Copy
' now move to Summary sheet
Sheets("Summary Sheet").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone
Application.CutCopyMode = False ' clears clipboard
Next LoopIndex
Как бы то ни было, у меня были проблемы с использованием copy & paste.Это означает, что пока ваш макрос запущен, вы больше ничего не можете сделать.
Поскольку это фиксированный диапазон, я бы предложил следующее:
For LoopIndex = StartIndex To EndIndex
Sheets("Summary Sheet").Range("A8").EntireRow.Insert
For i = 1 To 12
Sheets("Summary Sheet").Cells(8, i) = Sheets(LoopIndex).Cells(156, i)
Next
Next
Другие советы
ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False
или
ActiveSheet.Range("A2").EntireRow.Value = ActiveSheet.Range("A1").EntireRow.Value
Замените A1 на ваш источник, а A2 - на вашу цель.
Как только я выбрал диапазон, я поместил это
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
У меня отлично работает :)