Color scheme: Light
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Office SDK » Problembehandlung » VBA-Code lässt sich nicht kompilieren

VBA-Code lässt sich nicht kompilieren

Symptom: build endet mit Exitcode 4 und nennt ein oder mehrere Objekte, deren Code sich nicht kompilieren lässt.

Umgebung

Alle Versionen des WKL Office SDK.

Ursache

Access kompiliert das ganze VBA-Projekt und nennt kein Modul. Der Build sucht deshalb selbst: Er entfernt die Rümpfe aller Prozeduren, gibt dann jedem Objekt seinen vollständigen Code zurück und meldet die Objekte, die die Kompilierung verhindern. Lässt sich schon das reduzierte Projekt nicht kompilieren, liegt der Fehler in einem Deklarationsabschnitt oder einem Prozedurkopf – typischerweise ein Typ aus einem Verweis, der in references.json fehlt –, und gemeldet werden die Objekte, deren Deklarationen die Kompilierung verhindern.

Einige Ursachen findet die Prüfung schon in den Quellen, bevor Access startet, mit Datei und Zeile; check und build melden sie als error [Compile] module <Name>, <Datei>:<Zeile>:

  • Eine Deklaration nach der ersten Prozedur (WKL Office SDK 0.6.1 und neuer). VBA erlaubt Dim, Const, Modulvariablen (Private/Public), Declare, Type und Enum nur im Deklarationsteil am Anfang eines Moduls; eine Deklaration weiter unten verhindert die Kompilierung des ganzen Projekts.
  • Eine nicht definierte Variable: Einem Namen wird ein Wert zugewiesen (total = 1, Set rs = …, Zähler von For), er ist aber im ganzen Projekt nicht deklariert, und das Modul hat Option Explicit. Geprüft werden nur zugewiesene Namen in Standard- und Klassenmodulen.
  • Ein Schlüsselwort oder eine Anweisung von VBA als Sprungmarke (Write:, Name:) oder ein reserviertes Wort als Name eines Parameters, einer Variablen oder Prozedur (ByVal Until As Date).
  • Ein Modul mit dem Namen des VBA-Projekts (des Datenbanknamens); Access lädt es nicht.

Dieselbe Prüfung läuft im Access-Add-In mit „Code prüfen“ und nach jedem Speichern im VBA-Editor, dort auf dem Code, wie er im Editor steht (Access-Add-In verwenden).

Lösung

  1. Öffnen Sie die Datenbank (build/<configuration>/<name>.accdb des letzten erfolgreichen Builds oder die in Access geöffnete) und verwenden Sie im VBA-Editor Debuggen › Kompilieren: Er zeigt die Zeile. Das SDK kann die Zeile nicht melden, weil nur der VBA-Editor sie kennt und sie in einem Meldungsfeld anzeigt.
  2. Ein fehlender Verweis: Tragen Sie ihn in source/references.json ein (oder setzen Sie ihn in Access und exportieren Sie).
  3. Eine Deklaration nach der ersten Prozedur: Verschieben Sie die in der Meldung genannte Zeile nach oben, vor das erste Sub, Function oder Property des Moduls.
  4. Eine nicht definierte Variable: Deklarieren Sie sie mit Dim (oder auf Modulebene), oder korrigieren Sie den vertippten Namen.
  5. Eine Sprungmarke oder ein Name, der ein Schlüsselwort ist: Benennen Sie sie um, etwa in Done oder Failed.
  6. Ein doppelt deklarierter Name (eine Konstante, eine Variable oder eine Prozedur in zwei Modulen oder zweimal in einem): Benennen Sie eine um oder entfernen Sie sie.
de/wiki/msaccess/sdk/troubleshooting/vba-code-does-not-compile.txt · Last modified: by Wolfgang van der Stille