VBA Excel, как вставить значения без шрифта / цвета / BG цветового форматирования - PullRequest
3 голосов
/ 23 октября 2009

У меня есть макрос для копирования итоговой строки из каждой серии рабочих таблиц. Сводная строка специально отформатирована с помощью шрифта / шрифта color / bg color, но когда она вставлена ​​в «лист сумматоров», необходимо просто вставить значения без форматирования.

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.

Ответы [ 3 ]

6 голосов
/ 23 октября 2009

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

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

'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
4 голосов
/ 12 июля 2013

Как только я выбрал диапазон, я положил это

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

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

4 голосов
/ 23 октября 2009
ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False

или

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

Замените А1 своим источником и А2 своей целью.

...