vba excel come incollare valori senza formattazione di font / color / bg color
Domanda
Ho una macro per copiare una riga di riepilogo da ciascuna di una serie di fogli di lavoro. La riga di riepilogo è appositamente formattata con font / font color / bg color, ma una volta incollata nel 'foglio sommario', deve semplicemente incollare i valori senza formattazione.
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
Tutta la ricerca che ho fatto dice che PastSpecial, xlValues, xlPasteValues ??dovrebbero funzionare, ma nulla toglie la formattazione, non so cosa sto facendo di sbagliato qui. Incolla i valori anziché i valori di riferimento, quindi è buono. Ho una macro per ripristinare la formattazione in loop ma vorrei renderla più efficiente. Sto usando Excel 2007.
Soluzione
È davvero strano!
Il motivo è che stai copiando, inserendo e quindi incollando. Prova Inserisci, Copia e quindi Incolla:
'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
Per quello che vale, ho avuto problemi con l'uso di copy & amp; incolla. Significa che mentre la tua macro è in esecuzione, non puoi fare molto altro.
Dato che è un intervallo fisso, suggerirei questo:
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
Altri suggerimenti
ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False
o
ActiveSheet.Range("A2").EntireRow.Value = ActiveSheet.Range("A1").EntireRow.Value
Sostituisci A1 con la tua fonte e A2 con la tua destinazione.
Dopo aver selezionato l'intervallo, lo inserisco
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Funziona bene per me :)