vba excel как вставлять значения без форматирования цвета font / color / bg

У меня есть макрос для копирования итоговой строки из каждой серии листов. Строка сводки специально отформатирована с использованием шрифта / цвета шрифта / цвета 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.


person Kirk Hings    schedule 22.10.2009    source источник


Ответы (3)


Это действительно странно!

Причина в том, что вы копируете, вставляете, а затем вставляете. Попробуйте Вставить, Скопировать, а затем Вставить:

'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

Как бы то ни было, у меня были проблемы с копированием и вставкой. Это означает, что пока ваш макрос запущен, вы больше ничего не можете сделать.

Поскольку это фиксированный диапазон, я бы предложил следующее:

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
person Christian Payne    schedule 23.10.2009
comment
Как вы можете вставить что-то до того, как скопируете? - person TylerH; 01.02.2017

ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False

or

ActiveSheet.Range("A2").EntireRow.Value = ActiveSheet.Range("A1").EntireRow.Value

Замените A1 своим источником, а A2 своей целью.

person marg    schedule 22.10.2009
comment
Я знаю, это должно сработать, да? Но нет, это не так. Может быть, в книге, которую я получил от клиента, есть странная настройка. Я могу вставить вручную без форматирования, только не через код vba. Есть другие предложения? - person Kirk Hings; 23.10.2009
comment
Единственное объяснение, которое у меня есть, это то, что лист неактивен. Попробуйте заменить ActiveSheet именем таблицы. - person marg; 23.10.2009

Once I selected the range then I put this

 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone 

У меня отлично работает :)

person Saikat    schedule 12.07.2013