2011-12-09 4 views
16

Ho trovato domande simili che si occupano di copiare un intero foglio di lavoro in una cartella di lavoro e incollarlo in un'altra cartella di lavoro, ma mi interessa semplicemente copiare un intero foglio di lavoro e incollarlo su un nuovo foglio di lavoro - nella stessa cartella di lavoro.Copia un intero foglio di lavoro in un nuovo foglio di lavoro in Excel 2010

Sono in procinto di convertire un file .xls 2003 in .xlsm del 2010 e il vecchio metodo utilizzato per copiare e incollare tra fogli di lavoro non viene incollato con le altezze di riga corrette. La mia soluzione iniziale era di scorrere ogni riga e afferrare le altezze delle righe dal foglio di lavoro di cui sto copiando, quindi scorrere e inserire quei valori per le altezze delle righe nel foglio di lavoro su cui sto incollando, ma il problema con questo approccio è che il foglio contiene pulsanti che generano nuove righe che modificano la numerazione delle righe e il formato del foglio è tale che tutte le righe non possono essere solo una larghezza.

Quello che vorrei davvero essere in grado di fare è semplicemente copiare l'intero foglio di lavoro e incollarlo. Ecco il codice dalla versione 2003:

ThisWorkbook.Worksheets("Master").Cells.Copy 
newWorksheet.Paste 

Sono sorpreso che la conversione in .xlsm sta causando questo a rompere ora. Qualsiasi suggerimento o idea sarebbe fantastico.

+2

Un po 'prolisso ma una domanda ben scritta – aevanko

risposta

30

è più semplice solo per eseguire una copia esatta come qui di seguito per mettere la copia come l'ultimo foglio

Sub Test() 
Dim ws1 As Worksheet 
Set ws1 = ThisWorkbook.Worksheets("Master") 
ws1.Copy ThisWorkbook.Sheets(Sheets.Count) 
End Sub 
15
ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _ 
    Destination:=newWorksheet.Cells 

Quanto sopra copiare le celle. Se vuoi davvero duplicare l'intero foglio, allora andrei con @brettdj's answer.

+6

Suggerirei di copiare l'intervallo utilizzato in preferenza su tutte le celle. – brettdj

1
'Make the excel file that runs the software the active workbook 
ThisWorkbook.Activate 

'The first sheet used as a temporary place to hold the data 
ThisWorkbook.Worksheets(1).Cells.Copy 

'Create a new Excel workbook 
Dim NewCaseFile As Workbook 
Dim strFileName As String 

Set NewCaseFile = Workbooks.Add 
With NewCaseFile 
    Sheets(1).Select 
    Cells(1, 1).Select 
End With 

ActiveSheet.Paste 
+1

BTW, non è necessario selezionare la nuova cartella di lavoro e il foglio da incollare, basta usare 'NewCaseFile.Worksheets (1) .Paste'. –

6
' Assume that the code name the worksheet is Sheet1 

' Copy the sheet using code name and put in the end. 
' Note: Using the code name lets the user rename the worksheet without breaking the VBA code 
Sheet1.Copy After:=Sheets(Sheets.Count) 

' Rename the copied sheet keeping the same name and appending a string " copied" 
ActiveSheet.Name = Sheet1.Name & " copied" 
1

Mi è piaciuto molto @ codice di brettdj, ma poi ho scoperto che quando ho aggiunto codice aggiuntivo per modificare la copia, esso ha sovrascritto il mio foglio originale invece. Ho modificato la sua risposta in modo che l'ulteriore codice puntato su ws1 influirà sul nuovo foglio anziché sull'originale.

Sub Test() 
    Dim ws1 as Worksheet 
    ThisWorkbook.Worksheets("Master").Copy 
    Set ws1 = ThisWorkbook.Worksheets("Master (2)") 
End Sub