web-dev-qa-db-ger.com

Kopieren Sie ein gesamtes Arbeitsblatt in ein neues Arbeitsblatt in Excel 2010

Ich habe ähnliche Fragen zum Kopieren eines gesamten Arbeitsblatts in einer Arbeitsmappe und zum Einfügen in eine andere Arbeitsmappe gefunden. Ich bin jedoch daran interessiert, einfach ein gesamtes Arbeitsblatt zu kopieren und in ein neues Arbeitsblatt einzufügen - in derselben Arbeitsmappe. 

Ich bin dabei, eine 2003 .xls-Datei in .xlsm zu konvertieren, und die alte Methode, die zum Kopieren und Einfügen zwischen Arbeitsblättern verwendet wird, fügt nicht die richtigen Zeilenhöhen ein. Meine anfängliche Problemumgehung bestand darin, durch jede Zeile zu blättern und die Zeilenhöhen aus dem Arbeitsblatt zu kopieren, aus dem ich kopiere, dann die Werte für die Zeilenhöhen in das Arbeitsblatt einzufügen, in das ich einfüge, aber das Problem bei diesem Ansatz ist, dass Blatt enthält Schaltflächen, die neue Zeilen erzeugen, wodurch die Nummerierung der Zeilen geändert wird und das Format des Blattes so ist, dass nicht alle Zeilen eine Breite haben können. 

Ich möchte wirklich gerne das gesamte Arbeitsblatt kopieren und einfügen. Hier ist der Code aus der 2003-Version:

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

Ich bin erstaunt, dass die Konvertierung in .xlsm dazu führt, dass dies jetzt kaputt geht. Anregungen oder Ideen wären toll.

21
winnicki

Es ist einfacher, eine genaue Kopie wie unten auszuführen, um die Kopie als letztes Blatt einzufügen

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

Das obige wird die Zellen kopieren. Wenn Sie wirklich das gesamte Blatt kopieren möchten, würde ich mit @ brettdjs Antwort gehen.

' 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"
7
thanos.a

@ Brettdjs Code hat mir wirklich gut gefallen, aber dann habe ich festgestellt, dass ich, wenn ich zusätzlichen Code zum Bearbeiten der Kopie hinzufügte, stattdessen mein Originalblatt überschrieb. Ich habe seine Antwort so angepasst, dass weiterer Code, der auf ws1 verweist, sich auf das neue Blatt und nicht auf das Original auswirkt.

Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
2
S M Perron
'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
shanxiang shen

Wenn jemand wie ich eine Schätzung-Arbeitsmappe mit einer Standardanzahl sichtbarer Preislisten, einer Zusammenfassung und einer größeren Anzahl versteckter und "geschützter" Arbeitsblätter hat, die mit sensiblen Daten gefüllt sind, müssen jedoch möglicherweise zusätzliche sichtbare Arbeitsblätter erstellt werden, um ein ordnungsgemäßes Ergebnis zu erhalten Preis, ich habe Variante der obigen Antworten, die die genannten sichtbaren Arbeitsblätter auf der Grundlage eines geschützten versteckten "Masters" erstellt. Ich habe den von @/jean-fran% c3% a7ois-corbett und @ thanos-a in Kombination mit einfacher VBA bereitgestellten Code verwendet (siehe unten).

Sub sbInsertWorksheetAfter ()

    'This adds a new visible worksheet after the last visible worksheet

    ThisWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

    'This copies the content of the HIDDEN "Master" worksheet to the new VISIBLE ActiveSheet just created

    ThisWorkbook.Sheets("Master").Cells.Copy _
        Destination:=ActiveSheet.Cells

    'This gives the the new ActiveSheet a default name

    With ActiveSheet
        .Name = Sheet12.Name & " copied"
    End With

    'This changes the name of the ActiveSheet to the user's preference

    Dim sheetname As String

    With ActiveSheet
        sheetname = InputBox("Enter name of this Worksheet")
        .Name = sheetname
    End With

End Sub

0
Maccus