2009-10-22 1 views
2

У меня есть макрос, чтобы скопировать итоговую строку из каждой серии листов. Сводная строка специально форматируется цветом/цветом color/bg, но при вставке в «суммарный лист» она должна просто вставлять значения без форматирования.vba excel как вставить значения без форматирования шрифта/цвета/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.

ответ

4

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

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

'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 
+0

Как вы можете вставить что-нибудь, прежде чем скопировать его? – TylerH

4
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 с источником и А2 с вашей цели.

+0

Я знаю, это должен работать, да? Но нет, это не так. Возможно, в книге, которую я получил от клиента, есть странная настройка. Я могу вставить вручную без форматирования, а не через код vba. Любые другие предложения? –

+0

Единственное объяснение, которое у меня есть, это то, что лист не активен. Попробуйте заменить ActiveSheet на Tablename. – marg

3

После того, как я выбрал диапазон, то я ставлю этот штраф

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

работает для меня :)