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
- Installation. Die Bibliothek wird automatisch installiert und in Windows registriert.
- Verweis setzen. Öffnen Sie in Ihrer Rechnungsmappe die VBA Entwicklungsumgebung mit Alt und F11. Unter Extras und Verweise aktivieren Sie die SmartTools Bibliothek.
- 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
- Benannte Bereiche statt Zelladressen. Wie in Beispiel 1 gezeigt, macht das Ihren Code unabhängig vom Layout der Vorlage.
- 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.
- 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.
- 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.
- Immer validieren. Bauen Sie die Prüfung fest in den Ablauf ein und verhindern Sie den Versand, solange Verstöße gemeldet werden.
- 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.
- Eindeutige Dateinamen. Verwenden Sie die Rechnungsnummer im Dateinamen. So findet sich jede E-Rechnung samt Protokoll sofort wieder.
- 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.
- 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.
Alle Artikel zur E-Rechnung
- E-Rechnungspflicht erklärt: Zeitplan, Formate und Lösungen für Excel, Word und Access
- E-Rechnung aus Excel ohne Programmierung: der SmartTools E-Rechnung Assistent 3.0
- E-Rechnungen per VBA erzeugen: die SmartTools E-Rechnung VBA-Bibliothek für Excel (Sie lesen diesen Artikel)
- E-Rechnungen aus Word und Access erstellen
- Alle E-Rechnungslösungen im Überblick und bestellen
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.
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.

