- Thema
- VB6
- Codebeispiele
- Kommandozeile, VB6 / VBScript (COM)
- Veröffentlicht
Kurz: Wenn Access, Excel oder VB6 nach dem Update des Aloaha ZUGFeRD SDK einen fehlenden oder falschen Verweis auf „Aloaha_ZUGFeRD.tlb“ (z. B. „Version 9.0“) meldet oder bei einem Aufruf mit Laufzeitfehler 430 („Klasse unterstützt keine Automatisierung oder unterstützt erwartete Schnittstelle nicht“) abbricht, ist das Projekt noch für die Typbibliothek der alten Version übersetzt (Early Binding). Die zuverlässige Lösung: den Verweis entfernen, auf Late Binding mit CreateObject umstellen und den Code neu kompilieren. Vorher muss die neue DLL richtig registriert sein.
Schritt 1: die neue DLL richtig registrieren
Am einfachsten mit dem SDK-Setup Aloaha_ZUGFeRD_SDK.zip von der Download-Seite; es registriert die COM-Schnittstelle für 32 und 64 Bit. Von Hand: DLL auf ein lokales Laufwerk kopieren (nicht auf ein Netzlaufwerk), Eingabeaufforderung als Administrator öffnen und RegAsm mit Dateinamen und Optionen aufrufen – ohne Parameter zeigt RegAsm nur seine Hilfe an und registriert nichts:
cd /d C:\Aloaha
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe Aloaha_ZUGFeRD.dll /codebase /tlb
Den Ordner Framework (32 Bit) nehmen Sie für 32-Bit-Office und VB6, Framework64 für 64-Bit-Office. Prüfen können Sie die Registrierung mit dem Skript zugferd_com_test.vbs aus zugferdbinaries.zip, für 32 Bit mit C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs.
Schritt 2: alten Verweis entfernen und auf Late Binding umstellen
- VBA-Editor öffnen (Alt+F11), Extras → Verweise.
- Den Haken beim Eintrag entfernen, der mit „NICHT VORHANDEN“ beginnt bzw. beim alten Aloaha-ZUGFeRD-Verweis.
- Die Deklaration ändern:
' vorher (Early Binding, braucht den Verweis):
' Dim alo As Aloaha_ZUGFeRD.XML
' nachher (Late Binding, ohne Verweis):
Dim alo As Object
Set alo = CreateObject("Aloaha_ZUGFeRD.XML")
Mit Late Binding sucht VBA jede Methode erst beim Aufruf über ihren Namen. Die Datenbank funktioniert dann auch mit künftigen Versionen des SDK ohne neuen Verweis. Wer Early Binding behalten möchte, setzt nach der Registrierung einen neuen Haken bei „Aloaha ZUGFeRD Toolkit“.
Schritt 3: neu kompilieren
Debuggen → Kompilieren wählen, speichern und Access neu starten. Hält sich der Fehler 430 trotzdem, steckt noch alter übersetzter Code in der Datenbank. Dann einmal dekompilieren (vorher eine Sicherungskopie anlegen) und danach wieder kompilieren:
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" /decompile "C:\Pfad\zur\Datenbank.mdb"
Den Pfad zu MSACCESS.EXE passen Sie an Ihre Office-Version an (Office14 = Access 2010).
Warum passiert das?
Mit Early Binding speichert VBA beim Kompilieren, über welche Schnittstelle der Typbibliothek es eine Methode aufruft. Gehört diese gespeicherte Information zu einer älteren Typbibliothek als die registrierte DLL, schlägt der Aufruf mit Fehler 430 fehl, obwohl der Code unverändert aussieht. Late Binding umgeht das, weil die Methode erst zur Laufzeit über ihren Namen gesucht wird. Ausführlich zu Late und Early Binding: ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen.
Das Update auf die aktuelle Version ist mit gültigem Wartungsvertrag kostenlos.
Häufige Fragen
Was bedeutet Laufzeitfehler 430 bei Aloaha_ZUGFeRD?
„Klasse unterstützt keine Automatisierung oder unterstützt erwartete Schnittstelle nicht“: Das VBA-Projekt ist noch für die Typbibliothek einer älteren SDK-Version übersetzt. Abhilfe: Verweis entfernen, Late Binding mit CreateObject, neu kompilieren.
Access sucht Aloaha_ZUGFeRD.tlb Version 9, ich habe Version 11 installiert – warum?
Die Datenbank enthält noch einen Verweis auf die alte Typbibliothek. Er steht unter Extras → Verweise, nicht im Code. Entfernen Sie ihn und stellen Sie auf Late Binding um.
RegAsm zeigt nur eine Hilfe an – hat die Registrierung funktioniert?
Nein. Ohne Dateinamen und Optionen zeigt RegAsm nur seine Hilfe. Richtig ist regasm.exe Aloaha_ZUGFeRD.dll /codebase /tlb, als Administrator und mit dem RegAsm der passenden Bitbreite.
Welches RegAsm brauche ich für Access 32 Bit?
Das aus C:\Windows\Microsoft.NET\Framework\v4.0.30319\, nicht aus Framework64. Für 64-Bit-Office das aus Framework64.
Hilft Dekompilieren?
Ja, wenn der Fehler nach dem Neukompilieren bleibt. msaccess.exe /decompile mit dem Pfad zur Datenbank entfernt alten übersetzten Code; danach wieder kompilieren. Vorher eine Sicherungskopie anlegen.