VBA - Excel - Worksheet in neues Workbook

Zaiga

Lieutenant
Registriert
März 2011
Beiträge
924
Hallo zusammen,

folgender Code:
Code:
Sub SaveWorksheetAsXlsx(ws As Worksheet)
    Dim filePath As String
    filePath = ThisWorkbook.Path & "\" & ws.Name & ".xlsx"
    
    ' Create a new workbook
    Dim newWorkbook As Workbook
    Set newWorkbook = Workbooks.Add
    
    ' Copy the worksheet to the new workbook
    ws.Copy Before:=newWorkbook.Worksheets(1)
    
    ' Save the new workbook
    newWorkbook.SaveAs filePath, FileFormat:=xlOpenXMLWorkbook
    newWorkbook.Close
End Sub

soll das worksheet ws einfach ein neues Workbook erstellen und es am gleichen Ort Speichern.
Problem:
ws.Copy Before:=newWorkbook.Worksheets(1)

ist diese Zeile, VBA gibt hier ein Runtime error. Ohne funktionioert es aber es kopiert dann einfach das gesamte Workbook.

:) Hat jemand eine Idee?
Gruß
 
Ich hab gerade kein Excel zur Hand, aber ist in newWorkbook überhaupt schon ein Worksheet drin? Laufzeitfehler beim Zugriff auf ein Element in einem Array bzw einer Liste mittels Index treten in 99% aller Fälle auf, weil der Index "out of bounds" ist, also außerhalb des gültigen Bereichs. Du greifst mit newWorkbook.Worksheets(1) explizit auf das 1. Worksheet in der Liste zu. Ist diese Liste jedoch leer, weil Workbooks.Add eventuell ein leeres Workbook erstellt, schlägt dieser Zugriff fehl und wird mit einem Laufzeitfehler quittiert. Normalerweise wird jedoch explizit der Index-Fehler benannt, weil das mutmaßlich einer der häufigsten Laufzeitfehler überhaupt ist. Am besten prüfst daher vor dem Copy ob newWorkbook.Worksheets.Count überhaupt größer 0 ist.
 
  • Gefällt mir
Reaktionen: Zaiga
ws.Copy ohne Before:=newWorkbook.Worksheets(1)
funktioniert leider ebenfalls nicht.

Ohne funktioniert das ganze um man kriegt einfach ein neues leeres Workbook. Aber die copy eben nicht.
 
If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the copied Worksheet object.

[..]

This example first copies Sheet1 to a new blank workbook, and then saves and closes the new workbook.

Code:
Worksheets("Sheet1").Copy
With ActiveWorkbook
     .SaveAs Filename:=Environ("TEMP") & "\New1.xlsx", FileFormat:=xlOpenXMLWorkbook
     .Close SaveChanges:=False
End With

Quelle: Microsoft

Wenn du programmierst, solltest du stets die Dokumentation der Sprache im Blick behalten - dafür ist die Doku da. Zum einen dient sie als Referenz zu den Klassen, Objekten und deren Eigenschaften und Methoden und zum anderen findet man eben auch häufig Beispiele, die manchmal genau den richtigen oder zumindest einen ähnlichen Anwendungsfall zeigen.
 
Zuletzt bearbeitet:
Ich kann den Fehler bei mir nicht nachvollziehen, der SUB läuft bei mir ohne Fehler durch.

Daher wäre jetzt meine Frage, ob du dem SUB denn auch das gewünschte Worksheet (siehe ws As Worksheet) korrekt übergibst? Du rufst das SUB doch bestimmt mit einem anderen SUB auf. Ich würde dort die eigentliche Ursache des Fehlers vermuten.
 
Zurück
Oben