VBA-Tutorial: Objekte in Excel automatisiert erstellen (Arbeitsblätter, Arbeitsmappen, Ordner & Dateien)

Melden

VBA (Visual Basic for Applications) ist ein mächtiges Werkzeug in Excel, um Aufgaben zu automatisieren. Wenn du von "VBA Code to Create" sprichst, meinst du wahrscheinlich das Erstellen von Objekten wie Arbeitsblättern, Arbeitsmappen, Ordnern oder Dateien.

Hier ist ein umfassendes Tutorial, das die wichtigsten "Create"-Szenarien abdeckt.


Teil 1: Vorbereitung

Bevor du startest, stelle sicher, dass die Entwicklertools in Excel aktiviert sind:

  1. Rechtsklick auf ein beliebiges Tab im Menüband (Ribbon) -> Menüband anpassen.
  2. Haken bei Entwicklertools setzen.
  3. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  4. Gehe auf Einfügen -> Modul, um ein neues Modul für deinen Code zu erstellen.

Teil 2: Ein neues Arbeitsblatt erstellen (Create Sheet)

Dies ist einer der häufigsten Befehle.

Sub ErstelleTabelle()
    Dim ws As Worksheet
    Dim name As String
    name = "MeinNeuesBlatt"

    ' Prüfen, ob das Blatt bereits existiert (Fehlervermeidung)
    On Error Resume Next
    Set ws = Sheets(name)
    On Error GoTo 0

    If ws Is Nothing Then
        ' Erstellt ein neues Blatt am Ende aller Blätter
        Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
        ws.Name = name
        MsgBox "Blatt '" & name & "' wurde erstellt!"
    Else
        MsgBox "Blatt existiert bereits."
    End If
End Sub

Teil 3: Eine neue Arbeitsmappe erstellen (Create Workbook)

Wenn du Daten in eine völlig neue Excel-Datei auslagern möchtest.

Sub ErstelleArbeitsmappe()
    Dim wb As Workbook
    ' Erstellt eine neue, leere Arbeitsmappe
    Set wb = Workbooks.Add

    ' Speichert die Mappe unter einem Namen
    ' Pfad anpassen!
    wb.SaveAs "C:\DeinPfad\NeueDatei.xlsx"

    MsgBox "Neue Arbeitsmappe wurde unter C:\DeinPfad\ erstellt."
End Sub

Teil 4: Einen neuen Ordner erstellen (Create Folder)

Oft möchte man Berichte in einem neuen Windows-Ordner speichern.

Sub ErstelleOrdner()
    Dim pfad As String
    pfad = "C:\TestOrdner\VBA_Export"

    ' Prüfen, ob der Ordner bereits existiert
    If Dir(pfad, vbDirectory) = "" Then
        ' Erstellt den Ordner (MkDir = Make Directory)
        MkDir pfad
        MsgBox "Ordner wurde erstellt: " & pfad
    Else
        MsgBox "Ordner existiert bereits."
    End If
End Sub

Teil 5: Eine PDF-Datei erstellen (Create PDF)

Exportiere das aktuelle Blatt als PDF.

Sub ErstellePDF()
    Dim dateiName As String
    dateiName = ThisWorkbook.Path & "\MeinExport.pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=dateiName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

    MsgBox "PDF wurde erstellt!"
End Sub

Teil 6: Best Practices (Tipps vom Profi)

  1. Option Explicit: Schreibe immer Option Explicit ganz oben in dein Modul. Das zwingt dich, Variablen zu deklarieren, was Fehler reduziert.
  2. Fehlerbehandlung: Nutze On Error GoTo ErrorHandler, um zu verhindern, dass Excel abstürzt, wenn z.B. ein Pfad nicht gefunden wird.
  3. Variablen nutzen: Verwende Set, wenn du Objekten (wie Worksheets oder Workbooks) eine Variable zuweist.
  4. Bildschirmaktualisierung ausschalten: Wenn du viele Dinge gleichzeitig erstellst, beschleunige den Code mit:
    Application.ScreenUpdating = False
    ' Dein Code...
    Application.ScreenUpdating = True

Bonus: Alles zusammenführen

Hier ist ein Makro, das einen Ordner erstellt, eine neue Mappe darin speichert und diese PDF-konform benennt:

Sub KomplettProzess()
    Dim pfad As String: pfad = "C:\Temp\Bericht_" & Format(Date, "YYYYMMDD")

    ' 1. Ordner erstellen
    If Dir(pfad, vbDirectory) = "" Then MkDir pfad

    ' 2. Neue Mappe erstellen
    Dim wb As Workbook
    Set wb = Workbooks.Add

    ' 3. Speichern
    wb.SaveAs pfad & "\Monatsbericht.xlsx"

    MsgBox "Vorgang abgeschlossen in: " & pfad
End Sub

Welches spezifische Objekt möchtest du erstellen? (Tabellen, Diagramme, Pivot-Tabellen, Textdateien?) Gib mir Bescheid, dann passe ich den Code an!

0