E-Rechnungen per VBA erzeugen: die SmartTools E-Rechnung VBA-Bibliothek für Excel

Wer viele Rechnungen aus Excel erzeugt oder den kompletten Ablauf auf einen Klick reduzieren möchte, kommt an VBA nicht vorbei. Die SmartTools E-Rechnung VBA-Bibliothek 2.5 für Excel stellt dafür ein Objektmodell bereit, mit dem Sie E-Rechnungen in allen ZUGFeRD Profilen und als XRechnung erzeugen, einlesen, prüfen und anzeigen.

Excel-Inside Solutions setzt die Bibliothek in Kundenprojekten ein. In diesem Artikel zeigen wir den Aufbau einer Lösung anhand praxisnaher Codebeispiele. Grundlagen zur Pflicht und zu den Formaten finden Sie im Hauptartikel E-Rechnungspflicht erklärt.

Was die Bibliothek leistet

Die Bibliothek erweitert Excel um neue Objekte, die Sie aus Ihren eigenen Makros heraus ansprechen. Die gesamte Formatlogik steckt in der Komponente und wird vom Hersteller bei neuen Versionen der Standards gepflegt. Ihr eigener Code beschränkt sich darauf, die Daten aus Ihren Tabellen dem Rechnungsobjekt zuzuweisen.

  • Erstellen: ZUGFeRD in den Profilen Minimum bis Extended sowie XRechnung in den Syntaxvarianten CII und UBL
  • Einlesen: empfangene E-Rechnungen vollständig in ein Objekt importieren und auswerten
  • Validieren: Prüfung gegen die offiziellen Regeln, komplett offline
  • Anzeigen: E-Rechnungen mit einer einzigen Anweisung übersichtlich darstellen

Zum Lieferumfang gehört eine ungeschützte Musterlösung, die Sie als Vorlage verwenden oder in Ihre eigene Rechnungsmappe übernehmen können. Die Bibliothek läuft unter Excel 365, 2024, 2021, 2019, 2016 und 2013 und arbeitet vollständig lokal.

Einrichtung in wenigen Minuten

  1. Installation. Die Bibliothek wird automatisch installiert und in Windows registriert.
  2. Verweis setzen. Öffnen Sie in Ihrer Rechnungsmappe die VBA Entwicklungsumgebung mit Alt und F11. Unter Extras und Verweise aktivieren Sie die SmartTools Bibliothek.
  3. Musterlösung ansehen. Bevor Sie eigenen Code schreiben, lohnt ein Blick in die mitgelieferte Musterlösung. Dort finden Sie die genauen Klassennamen für jedes Profil und vollständige Abläufe inklusive aller Pflichtfelder.

Wichtig: Die folgenden Beispiele zeigen den typischen Aufbau einer Lösung. Sie sind bewusst schlank gehalten und ersetzen nicht die vollständige Befüllung aller Pflichtangaben, wie sie die Musterlösung zeigt.

Beispiel 1: Kopfdaten aus benannten Bereichen übernehmen

Das Rechnungsobjekt wird mit einer einzigen Anweisung angelegt. Anschließend weisen Sie Verkäufer und Käufer zu. Statt fester Zelladressen verwenden wir benannte Bereiche. Verschiebt sich später eine Zeile in der Vorlage, bleibt der Code trotzdem korrekt.

'***************************************************
' VBA-Code erstellt 9/2026
' A. Eckl - Excel-Inside Solutions
' https://excel-inside.de
' XRechnung anlegen und Kopfdaten aus benannten
' Bereichen der Rechnungsmappe uebernehmen
'***************************************************
Option Explicit

Function Wert(strName As String) As String
  '** Inhalt eines benannten Bereichs als Text liefern
  Wert = Trim$(CStr(ThisWorkbook.Names(strName).RefersToRange.Value))
End Function

Function NeueXRechnung() As SmartTools_Invoicing.XRechnungInvoice
  Dim objInvoice As SmartTools_Invoicing.XRechnungInvoice

  Set objInvoice = New SmartTools_Invoicing.XRechnungInvoice

  '** Verkaeufer (eigene Firma)
  With objInvoice.Seller
    .Name = Wert("Verkaeufer_Name")
    .PostalAddress.AddressLine1 = Wert("Verkaeufer_Strasse")
    .PostalAddress.PostCode = Wert("Verkaeufer_PLZ")
    .PostalAddress.City = Wert("Verkaeufer_Ort")
    .PostalAddress.CountryCode = Wert("Verkaeufer_Land")
  End With

  '** Kaeufer (Rechnungsempfaenger)
  With objInvoice.Buyer
    .Name = Wert("Kunde_Name")
    .PostalAddress.AddressLine1 = Wert("Kunde_Strasse")
    .PostalAddress.PostCode = Wert("Kunde_PLZ")
    .PostalAddress.City = Wert("Kunde_Ort")
    .PostalAddress.CountryCode = Wert("Kunde_Land")
  End With

  Set NeueXRechnung = objInvoice
End Function

Den Ländercode tragen Sie im Format nach ISO 3166 ein, für Deutschland also DE.

Beispiel 2: Rechnungspositionen in einer Schleife übertragen

Die Positionen stehen in der Vorlage untereinander. Eine Schleife liest jede Zeile aus, legt ein Positionsobjekt an und hängt es an die Rechnung an. Das Beispiel verwendet die Positionsklasse für das Profil Extended, das auch mehrstufige Unterpositionen erlaubt. Für andere Profile verwenden Sie die entsprechende Klasse aus der Musterlösung.

'***************************************************
' VBA-Code erstellt 9/2026
' A. Eckl - Excel-Inside Solutions
' https://excel-inside.de
' Rechnungspositionen ab Zeile 20 in die E-Rechnung
' uebertragen (Spalten A bis E)
'***************************************************
Sub PositionenUebertragen(objInvoice As Object, wsRechnung As Worksheet)
  Dim objLine As SmartTools_Invoicing_EN16931_ZUGFeRD_Extended_InvoiceLine
  Dim lngZeile As Long

  lngZeile = 20

  '** Bis zur ersten leeren Zeile in Spalte A lesen
  Do While Len(wsRechnung.Cells(lngZeile, 1).Value) > 0
    Set objLine = New SmartTools_Invoicing_EN16931_ZUGFeRD_Extended_InvoiceLine
    With objLine
      .Id = CStr(wsRechnung.Cells(lngZeile, 1).Value)
      .ItemInformation.Name = wsRechnung.Cells(lngZeile, 2).Value
      .InvoicedQuantity = wsRechnung.Cells(lngZeile, 3).Value
      '** Einheitencode, z.B. H87 fuer Stueck oder HUR fuer Stunde
      .InvoicedQuantityUnitOfMeasureCode = wsRechnung.Cells(lngZeile, 4).Value
      '** Preise immer auf zwei Nachkommastellen runden
      .PriceDetails.NetPrice = Round(wsRechnung.Cells(lngZeile, 5).Value, 2)
    End With

    objInvoice.AddLine objLine
    lngZeile = lngZeile + 1
  Loop
End Sub

Beispiel 3: ZUGFeRD aus der bestehenden PDF Rechnung

Für ZUGFeRD geben Sie Ihr Rechnungsblatt zunächst wie gewohnt als PDF aus. Danach übergeben Sie der Methode Save den Pfad dieser PDF. Die Bibliothek erzeugt die XML Daten, bettet sie in die PDF ein und wandelt die Datei in das Archivformat PDF/A (Version 3) um.

'***************************************************
' VBA-Code erstellt 9/2026
' A. Eckl - Excel-Inside Solutions
' https://excel-inside.de
' Rechnungsblatt als PDF ausgeben und als ZUGFeRD
' Rechnung speichern
'***************************************************
Sub ZUGFeRDErzeugen(objZFRechnung As Object, wsRechnung As Worksheet, strPdf As String)
  '** Schritt 1: Das gewohnte Rechnungsbild als PDF ausgeben
  wsRechnung.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPdf, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False

  '** Schritt 2: XML erzeugen, einbetten und in PDF/A wandeln
  objZFRechnung.Save strPdf
End Sub

Das Objekt objZFRechnung legen Sie dabei mit der ZUGFeRD Klasse Ihres gewünschten Profils an, die Zuweisung der Daten erfolgt genauso wie in den Beispielen 1 und 2.

Beispiel 4: Vor dem Versand prüfen und anzeigen

Die Methode Validate prüft die E-Rechnung gegen die offiziellen Regeln und liefert ein Array mit den gefundenen Verstößen. Die folgende Hilfsfunktion ermittelt die Anzahl robust, auch wenn das Ergebnis leer ist. Ist alles in Ordnung, öffnet sich die Übersicht der Bibliothek zur Sichtkontrolle.

'***************************************************
' VBA-Code erstellt 9/2026
' A. Eckl - Excel-Inside Solutions
' https://excel-inside.de
' E-Rechnung validieren, Ergebnis melden und die
' fertige Rechnung zur Kontrolle anzeigen
'***************************************************
Function AnzahlVerstoesse(arrVerstoesse As Variant) As Long
  '** Leeres oder nicht belegtes Ergebnis ergibt 0
  On Error GoTo KeinErgebnis
  AnzahlVerstoesse = UBound(arrVerstoesse) - LBound(arrVerstoesse) + 1
  Exit Function
KeinErgebnis:
  AnzahlVerstoesse = 0
End Function

Sub RechnungPruefen(objInvoice As Object, strDatei As String)
  Dim arrInvoiceViolations As Variant
  Dim lngAnzahl As Long

  arrInvoiceViolations = objInvoice.Validate()
  lngAnzahl = AnzahlVerstoesse(arrInvoiceViolations)

  If lngAnzahl = 0 Then
    '** Gueltig: Rechnung zur Sichtkontrolle anzeigen
    xlE_Rechnung.ShowInvoiceOverview strDatei
  Else
    MsgBox "Die E-Rechnung enthaelt " & lngAnzahl & _
      " Regelverstoesse und sollte nicht versendet werden.", _
      vbExclamation, "Pruefung E-Rechnung"
  End If
End Sub

In der Musterlösung sehen Sie, wie die einzelnen Einträge des Arrays aufgebaut sind. So können Sie die Meldungen Ihren Anwendern im Klartext anzeigen oder als Protokoll neben der Rechnung speichern.

Eingangsrechnungen einlesen

Die Bibliothek funktioniert auch in die andere Richtung. Mit der Methode Import lesen Sie eine empfangene E-Rechnung vollständig in ein Rechnungsobjekt ein. Anschließend greifen Sie gezielt auf einzelne Inhalte zu, etwa den Rechnungssteller, den Betrag oder die Fälligkeit, und schreiben sie in eine Budgettabelle oder Projektkalkulation.

'***************************************************
' VBA-Code erstellt 9/2026
' A. Eckl - Excel-Inside Solutions
' https://excel-inside.de
' Empfangene E-Rechnung einlesen und den
' Rechnungssteller in die naechste freie Zeile schreiben
'***************************************************
Sub EingangsrechnungLesen(objInvoice As Object, strDatei As String, wsEingang As Worksheet)
  Dim lngZeile As Long

  '** Komplette Datenstruktur der E-Rechnung einlesen
  objInvoice.Import strDatei

  lngZeile = wsEingang.Cells(wsEingang.Rows.Count, 1).End(xlUp).Row + 1
  wsEingang.Cells(lngZeile, 1).Value = objInvoice.Seller.Name
  wsEingang.Cells(lngZeile, 2).Value = strDatei
  '** Weitere Felder wie Betrag und Faelligkeit analog
End Sub

Tipps und Kniffe aus unseren Projekten

  1. Benannte Bereiche statt Zelladressen. Wie in Beispiel 1 gezeigt, macht das Ihren Code unabhängig vom Layout der Vorlage.
  2. Eine Prozedur je Aufgabe. Trennen Sie Kopfdaten, Positionen, Ausgabe und Prüfung in eigene Prozeduren. So wechseln Sie das Format, ohne den gesamten Code anzupassen.
  3. Kaufmännisch runden. Rundungsdifferenzen zwischen Positionen und Summen gehören zu den häufigsten Gründen für Regelverstöße. Runden Sie Preise und Beträge konsequent auf zwei Nachkommastellen.
  4. Einheitencodes aus einer Liste. E-Rechnungen verwenden genormte Codes wie H87 für Stück oder HUR für Stunde. Hinterlegen Sie diese in einer Auswahlliste, dann tippt niemand einen ungültigen Code ein.
  5. Immer validieren. Bauen Sie die Prüfung fest in den Ablauf ein und verhindern Sie den Versand, solange Verstöße gemeldet werden.
  6. Prüfprotokoll archivieren. Die Finanzverwaltung empfiehlt, das Ergebnis der Validierung zusammen mit der Rechnung aufzubewahren. Speichern Sie das Protokoll mit demselben Dateinamen neben der E-Rechnung.
  7. Eindeutige Dateinamen. Verwenden Sie die Rechnungsnummer im Dateinamen. So findet sich jede E-Rechnung samt Protokoll sofort wieder.
  8. Teilrechnungen und Schlussrechnungen. Die Bibliothek unterstützt auch diese Abrechnungsform, einschließlich der Verrechnung vorheriger Teilrechnungen in der Schlussrechnung. Testen Sie diesen Ablauf mit echten Projektdaten, bevor Sie live gehen.
  9. Lizenzen planen. Benötigt wird eine Lizenz je Arbeitsplatz, an dem E-Rechnungen erzeugt werden. Für Entwickler, die Lösungen an viele Anwender verteilen, bietet SmartTools besondere Konditionen an.

Aus der Praxis: drei Schaltflächen statt Formatwissen

Für ein Planungsbüro hat Excel-Inside Solutions die Bibliothek in eine bestehende Rechnungsmappe mit bis zu 50 Teilrechnungen und einer Schlussrechnung je Projekt integriert. Die Anwender sehen lediglich drei Schaltflächen für XRechnung, ZUGFeRD und eine klassische PDF. Datenübernahme, Verrechnung der Teilrechnungen, Prüfung und Ablage laufen im Hintergrund. Die Pflege der Formate übernimmt SmartTools, sodass die Mappe auch bei neuen Standards unverändert weiterarbeitet.

Sie arbeiten mit Word oder einer Access Datenbank? Dann lesen Sie unseren Artikel E-Rechnungen aus Word und Access erstellen. Ohne VBA kommt der E-Rechnung Assistent für Excel aus.

Ihre E-Rechnung mit einem Klick

Die SmartTools E-Rechnung VBA-Bibliothek erhalten Sie über unsere Produktseite. Keine Zeit für die Programmierung? Excel-Inside Solutions integriert die Bibliothek in Ihre bestehende Rechnungsmappe, inklusive Bedienoberfläche, Prüfung und Ablage.

Zur VBA Bibliothek Integration anfragen

Häufige Fragen zur E-Rechnung VBA-Bibliothek

Welche Formate kann die Bibliothek erzeugen?

Alle ZUGFeRD Profile von Minimum bis Extended sowie XRechnung in den Syntaxvarianten CII und UBL. Das Objektmodell ist so aufgebaut, dass Sie das Ausgabeformat mit wenig Aufwand wechseln können.

Kann ich meine bestehende PDF Rechnung weiterverwenden?

Ja. Sie geben Ihr Rechnungsblatt wie gewohnt als PDF aus und übergeben die Datei der Methode Save. Die Bibliothek bettet die XML Daten ein und wandelt die PDF in das erforderliche Archivformat um.

Funktioniert die Validierung ohne Internetverbindung?

Ja. Die Prüfung gegen die offiziellen Regeln erfolgt vollständig offline auf Ihrem Rechner. Das Ergebnis erhalten Sie als Array, das Sie programmatisch auswerten können.

Werden Teilrechnungen und Schlussrechnungen unterstützt?

Ja. Auch umfangreiche Projekte mit vielen Teilrechnungen und einer abschließenden Schlussrechnung lassen sich als E-Rechnung abbilden.

Übernimmt Excel-Inside Solutions die Programmierung?

Ja. Wir integrieren die Bibliothek in Ihre bestehende Rechnungsmappe und passen den Ablauf an Ihre Anforderungen an, von der einfachen Schaltfläche bis zur vollständigen Automatisierung.

Anfrage zur Integration

Beschreiben Sie kurz Ihre Rechnungsmappe und den gewünschten Ablauf. Gerne können Sie im Anschluss eine anonymisierte Beispielrechnung senden. Wir melden uns mit einer Einschätzung und einem unverbindlichen Angebot.

Wir freuen uns, dass Sie Interesse an unseren Dienstleistungen haben! Wenn Sie ein kostenloses und unverbindliches Angebot einholen möchten, füllen Sie bitte die nachstehenden Felder aus. Geben Sie uns einen detaillierten Überblick über Ihre Anfrage, damit wir Ihnen ein maßgeschneidertes Angebot unterbreiten können, das genau auf Ihre Bedürfnisse zugeschnitten ist.

Alternativ können Sie uns jederzeit eine E-Mail an Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. senden. Unser Team steht bereit, um Ihre Fragen zu beantworten und Ihnen bei Ihren Anliegen zu helfen.

Wir möchten betonen, dass wir Ihnen das Angebot völlig kostenfrei und ohne Verpflichtungen erstellen. In der Regel erhalten Sie innerhalb weniger Stunden eine Rückmeldung von uns. Ihre Zufriedenheit liegt uns am Herzen, und wir sind bestrebt, Ihnen schnell und effizient zu helfen.

Vielen Dank für Ihr Vertrauen in uns. Wir freuen uns auf Ihre Anfrage!

Invalid Input
Invalid Input
Keine gültige E-Mail Adresse
Invalid Input
Invalid Input
Invalid Input
Sicherheitsabfrage
Ungültige Eingabe
Anfrage senden

Sie brauchen eine individuelle Excel-/Office-Lösung?

Wir entwickeln Ihr Makro, Tool oder Ihre Datenbank – passgenau für Ihr Unternehmen.

Relevante Artikel

Projekt-Anfrage

Excel automatisieren. Zeit sparen.
Fehler vermeiden.
Wir entwickeln Ihre individuelle
Excel- / VBA-Lösung.
Jetzt anfragen!

    Wir benutzen Cookies
    Ihre Zufriedenheit ist unser Ziel, deshalb verwenden wir Cookies. Mit diesen ermöglichen wir, dass unsere Webseite zuverlässig und sicher läuft, wir die Performance im Blick behalten und Sie besser ansprechen können. Cookies werden benötigt, damit technisch alles funktioniert und Sie auch externe Inhalte lesen können. Des Weiteren sammeln wir unter anderem Daten über aufgerufene Seiten, getätigte Käufe oder geklickte Buttons, um so unser Angebot an Sie zu Verbessern. Mehr über unsere verwendeten Dienste erfahren Sie unter „Weitere Informationen“. Mit Klick auf „Akzeptieren“ erklären Sie sich mit der Verwendung dieser Dienste einverstanden. Ihre Einwilligung können Sie jederzeit mit Wirkung auf die Zukunft widerrufen oder ändern.