Im Allgemeinen möchte ich also eine Kopie einer Arbeitsmappe erstellen. Die Quellarbeitsmappe führt jedoch meine Makros aus, und ich möchte, dass eine identische Kopie von sich selbst erstellt wird, jedoch ohne die Makros. Ich denke, es sollte einen einfachen Weg geben, dies mit VBA zu tun, habe es aber noch nicht gefunden. Ich erwäge, die Blätter einzeln in die neue Arbeitsmappe zu kopieren, die ich erstellen werde. Wie würde ich das machen? Gibt es einen besseren Weg?
Jemand bei Ozgrid antwortete auf eine ähnliche Frage. Grundsätzlich kopieren Sie einfach jedes Blatt einzeln von Workbook1 nach Workbook2.
Sub CopyWorkbook()
Dim currentSheet as Worksheet
Dim sheetIndex as Integer
sheetIndex = 1
For Each currentSheet in Worksheets
Windows("SOURCE WORKBOOK").Activate
currentSheet.Select
currentSheet.Copy Before:=Workbooks("TARGET WORKBOOK").Sheets(sheetIndex)
sheetIndex = sheetIndex + 1
Next currentSheet
End Sub
Haftungsausschluss: Ich habe diesen Code nicht ausprobiert und stattdessen das verknüpfte Beispiel nur für Ihr Problem übernommen. Zumindest sollte es Sie zu Ihrer beabsichtigten Lösung führen.
Ich möchte die Antwort von keytarhero leicht umschreiben:
Sub CopyWorkbook()
Dim sh as Worksheet, wb as workbook
Set wb = workbooks("Target workbook")
For Each sh in workbooks("source workbook").Worksheets
sh.Copy After:=wb.Sheets(wb.sheets.count)
Next sh
End Sub
Bearbeiten: Sie können auch ein Array von Blattnamen erstellen und auf einmal kopieren.
Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
After:=wb.Sheets(wb.sheets.count)
Hinweis : Kopieren eines Blattes aus einem XLS? zu einem XLS führt zu einem Fehler. Das Gegenteil funktioniert gut (XLS zu XLSX)
Sie könnten als xlsx speichern. Dann verlieren Sie die Makros und erstellen eine neue Arbeitsmappe mit etwas weniger Arbeit.
ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
Ich konnte alle Arbeitsblätter in einer Arbeitsmappe, auf der eine vba-App ausgeführt wurde, in eine neue Arbeitsmappe ohne App-Makros kopieren.
ActiveWorkbook.Sheets.Copy
Angenommen, alle Ihre Makros befinden sich in Modulen. Vielleicht dieser Link wird helfen. Nach dem Kopieren der Arbeitsmappe wiederholen Sie einfach jedes Modul und löschen es
Du kannst einfach schreiben
Worksheets.Copy
statt einen Zyklus auszuführen ..__ Standardmäßig wird die Arbeitsblattsammlung in einer neuen Arbeitsmappe wiedergegeben.
Es ist erwiesen, in der Version 2010 von XL zu funktionieren.
Versuchen Sie es stattdessen.
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Copy
Next
Workbooks.Open Filename:="Path(Ex: C:\Reports\ClientWiseReport.xls)"ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet