🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA References in Excel — Extras > Verweise, fehlende Bibliotheken und Can't find project or library

|

VBA References in Excel — Extras > Verweise, fehlende Bibliotheken und Can't find project or library

TL;DR — Extras > Verweise (Tools > References) im VBA-Editor ist die Abhängigkeitsliste Ihres Projekts. Jede angehakte Zeile erlaubt Ihrem Code, die Namen aus einer Bibliothek zu verwenden: Word.Application, Dictionary, ppLayoutBlank. Die Liste wird in der Arbeitsmappe gespeichert, aber auf jedem PC neu aufgelöst, der die Datei öffnet. Fehlt eine Bibliothek auf diesem PC oder liegt sie nur in einer älteren Version vor, zeigt die Zeile MISSING: (im deutschen Office: NICHT VORHANDEN:), und dann lässt sich das ganze Projekt nicht mehr kompilieren — meist an einer harmlosen Zeile wie Left oder Date, mit Can't find project or library („Projekt oder Bibliothek nicht gefunden“). Beheben Sie das, indem Sie die fehlende Zeile auf diesem PC abhaken oder ersetzen. Vorbeugen können Sie, indem Sie Verweise nur während der Entwicklung für IntelliSense nutzen und die Datei mit Late Binding ausliefern — mit CreateObject und ganz ohne zusätzliche Verweise.

' Mit einem Verweis auf "Microsoft Word 16.0 Object Library"
Dim wd As Word.Application          ' early bound: IntelliSense, benannte Konstanten
Set wd = New Word.Application

' Ganz ohne Verweis
Dim wd2 As Object                   ' late bound: laeuft auf jedem PC mit Word
Set wd2 = CreateObject("Word.Application")

Dies ist der dritte Artikel einer Reihe darüber, andere Office-Programme aus Excel zu steuern. Die Anleitungen zu PowerPoint und Word zeigen die Objektmodelle der anderen Programme. Dieser Artikel behandelt die Verbindung dazwischen: wie VBA erfährt, was Word.Range oder ppLayoutBlank bedeutet, und was passiert, wenn diese Verbindung auf dem Rechner eines anderen kaputt ist. Die Regel der Reihe gilt weiterhin: Jedes Objekt gehört zu genau einer Anwendung — sagen Sie also, zu welcher.

Was Sie lernen

  • Das mentale Modell: Verweise sind eine Abhängigkeitsliste, die auf jedem PC neu aufgelöst wird
  • Die vier Standardverweise und wie Sie einen weiteren hinzufügen
  • Die zwei Kompilierfehler: einer für einen fehlenden Haken, einer für eine fehlende Bibliothek
  • Warum ein defekter Verweis Left, Date und Format scheitern lässt
  • Wie die Prioritätsreihenfolge entscheidet, welches Range Sie bekommen
  • Wie Sie Verweise per Code auflisten, und warum Sie sie nicht auf diesem Weg reparieren sollten
  • Mit Early Binding entwickeln, mit Late Binding ausliefern — per bedingter Kompilierung

Das mentale Modell: eine Abhängigkeitsliste, die mit der Datei reist

Jeder Name in Ihrem Code muss irgendwo gefunden werden. MsgBox stammt aus der VBA-Bibliothek, Worksheets aus der von Excel und Word.Document aus der von Word — aber nur, wenn Ihr Projekt die Word-Bibliothek als Verweis führt. Öffnen Sie den VBA-Editor (Alt+F11) und wählen Sie Extras > Verweise (Tools > References), um die Liste zu sehen.

Jede angehakte Zeile hält fest, welche Bibliothek gemeint ist: eine Kennung und eine Versionsnummer, dazu die Datei, in der sie auf Ihrem PC gefunden wurde. Die Arbeitsmappe speichert die Liste. Die Bibliotheken speichert sie nicht. Bei jedem Öffnen der Datei sucht VBA also jede Bibliothek erneut — auf diesem PC:

Auf dem anderen PC Was VBA tut
dieselbe Bibliothek, gleiche oder neuere Office-Version findet sie; Office-Bibliotheken werden sogar auf die neuere Version angehoben
das Programm ist nicht installiert markiert die Zeile mit MISSING:
eine ältere Office-Version als Ihre markiert die Zeile mit MISSING:; Verweise werden nach vorn angehoben, nie zurück
ein reines 32-Bit-Steuerelement unter 64-Bit-Office markiert die Zeile mit MISSING:

Diese Tabelle ist das ganze Thema. Ein Verweis ist ein Versprechen, dass eine Bibliothek vorhanden sein wird — und dieses Versprechen wird auf einem Rechner geprüft, den Sie nie gesehen haben.

Die vier Standardverweise, und einen Verweis hinzufügen

Eine neue Excel-Arbeitsmappe hat bereits vier Verweise, über die Sie selten nachdenken müssen:

  • Visual Basic For Applications: die Sprache selbst, Left, Date, MsgBox
  • Microsoft Excel 16.0 Object Library: Workbook, Range, Worksheet
  • OLE Automation: grundlegende COM-Unterstützung
  • Microsoft Office 16.0 Object Library: gemeinsame Office-Objekte wie FileDialog

Wenn Sie ein UserForm einfügen, kommt Microsoft Forms 2.0 Object Library hinzu. Die ersten beiden lassen sich weder entfernen noch verschieben.

Um einen Verweis hinzuzufügen, haken Sie ihn in der Liste an, zum Beispiel Microsoft Word 16.0 Object Library oder Microsoft Scripting Runtime, und klicken auf OK. Steht er nicht in der Liste, können Sie mit Durchsuchen... (Browse...) auf die Bibliotheksdatei zeigen. Solange ein Makro läuft oder angehalten ist, ist der Menüpunkt ausgegraut — klicken Sie also zuerst auf Zurücksetzen (Reset).

Was Sie dafür bekommen: IntelliSense für die neuen Objekte, deren benannte Konstanten wie wdReplaceAll, New statt CreateObject und Typprüfung beim Kompilieren. Die CreateObject-Anleitung vergleicht das ausführlich mit Late Binding; in diesem Artikel geht es darum, was der Verweis kostet, sobald die Datei Ihren Schreibtisch verlässt.

Zwei Kompilierfehler, zwei verschiedene Probleme

Die meisten Probleme mit Verweisen kommen als einer von zwei Kompilierfehlern daher — und die beiden bedeuten Gegensätzliches.

User-defined type not defined („Benutzerdefinierter Typ nicht definiert“). Sie haben Dim doc As Word.Document oder Dim d As Dictionary geschrieben, aber der Verweis ist in diesem Projekt nicht angehakt. Der Compiler hat von dem Typ nie gehört. Haken Sie die Bibliothek an, oder stellen Sie die Variable auf Object um und erzeugen Sie sie mit CreateObject.

Can't find project or library („Projekt oder Bibliothek nicht gefunden“). Der Verweis steht in der Liste, aber auf diesem PC heißt es dort MISSING:. Die Datei wurde dort gebaut, wo die Bibliothek existierte, und dort geöffnet, wo sie fehlt. Das ist der Fehler, der bei den Nutzern ankommt, denn auf dem Rechner des Autors hat alles funktioniert.

Warum Left und Date scheitern, wenn Word fehlt

Das Verwirrende an Can't find project or library ist, worauf der Fehler zeigt. Eine Arbeitsmappe mit einem fehlenden Word-Verweis bleibt an einer Zeile wie dieser stehen:

customer = Left(Range("A2").Value, 10)     ' markiert: Left

Left hat mit Word nichts zu tun. Beim Kompilieren schlägt VBA jedoch jeden unqualifizierten Namen der Reihe nach in den Verweisen nach, und eine fehlende Bibliothek bricht diese Suche. Der Compiler gibt beim ersten Namen auf, den er nicht zuordnen kann — oft eine gängige integrierte Funktion wie Left, Mid, Date, Format oder Trim. Die markierte Funktion steht nur zufällig daneben.

Die Lösung erfolgt auf dem PC, der den Fehler zeigt:

  1. Öffnen Sie den VBA-Editor, klicken Sie auf Zurücksetzen, falls ein Makro angehalten ist, und wählen Sie Extras > Verweise.
  2. Suchen Sie die Zeile, die mit MISSING: beginnt (deutsch: NICHT VORHANDEN:).
  3. Entfernen Sie den Haken, wenn der Code die Bibliothek nicht braucht, oder haken Sie die Version an, die auf diesem PC vorhanden ist.
  4. Wählen Sie Debuggen > Kompilieren von VBAProject (Debug > Compile VBAProject), um zu bestätigen, dass sich das Projekt wieder kompilieren lässt.

Manchmal liest man den Rat, VBA.Left statt Left zu schreiben. Ein vollständig qualifizierter Name umgeht die Suche, die Zeile kompiliert also. Das kaschiert nur das Symptom: Der fehlende Verweis ist weiterhin da, und der Code, der diese Bibliothek tatsächlich nutzt, scheitert trotzdem.

Priorität: Welches Range bekommen Sie?

Definieren zwei Bibliotheken denselben Namen, entscheidet die Reihenfolge in der Liste. Die Excel-Bibliothek steht über der von Word; in Excel-Code meint ein unqualifiziertes Range, Shape, Font oder Selection also die Excel-Version. Deshalb scheitert Dim r As Range gefolgt von Set r = doc.Content mit Type mismatch („Typen unverträglich“), wie die Word-Anleitung zeigt.

Mit den Priorität-Pfeilen im Dialog Verweise können Sie eine Bibliothek nach oben schieben. Eine Bibliothek zu verschieben, um zu ändern, was ein nackter Name bedeutet, ist allerdings eine Falle: Wer als Nächstes einen Verweis hinzufügt, ändert es wieder. Qualifizieren Sie stattdessen: Word.Range, Excel.Range, Scripting.Dictionary. Ein qualifizierter Name bedeutet dasselbe, egal in welcher Reihenfolge.

Verweise per Code auflisten — und warum Sie sie so nicht reparieren sollten

Über VBProject.References können Sie die Liste aus VBA heraus prüfen:

Sub ListReferences()
    Dim ref As Object, desc As String
    For Each ref In ThisWorkbook.VBProject.References
        desc = "(unavailable)"
        On Error Resume Next
        desc = ref.Description              ' kann bei defektem Verweis fehlschlagen
        On Error GoTo 0
        Debug.Print IIf(ref.IsBroken, "MISSING  ", "ok       "); ref.GUID; "  "; desc
    Next ref
End Sub

Dafür muss im Trust Center die Option Zugriff auf das VBA-Projektobjektmodell vertrauen (Trust access to the VBA project object model) aktiviert sein; sonst scheitert schon die erste Zeile mit Fehler 1004, Programmatic access to Visual Basic Project is not trusted (der programmgesteuerte Zugriff auf das Visual-Basic-Projekt ist nicht vertrauenswürdig). Die Ausgabe landet im Direktfenster (Immediate window), wie in der Debug.Print-Anleitung.

Dasselbe Objekt bietet AddFromGuid, AddFromFile und Remove, und es ist verlockend, ein Workbook_Open zu schreiben, das Verweise repariert. Verlassen Sie sich nicht darauf. Die nötige Einstellung ist standardmäßig aus und von der IT oft gesperrt, und Code in einem Projekt mit fehlendem Verweis kompiliert womöglich nicht einmal weit genug, um die Reparatur auszuführen. Nutzen Sie solchen Code zur Diagnose auf Ihrem eigenen PC, nicht als Lösung, die Sie ausliefern.

Die Abwägung: mit Verweisen entwickeln, ohne sie ausliefern

Ein Verweis ist eine Abhängigkeit, und jede Abhängigkeit ist ein Versprechen über den PC des Nutzers. Meine Regel: Eine Datei, die Ihren Rechner verlässt, sollte nur die vier Standardverweise tragen. Alles andere läuft über CreateObject und Object-Variablen; die funktionieren auf jedem PC, auf dem das Programm installiert ist, und scheitern auf jedem anderen mit einem klaren Laufzeitfehler.

Auf IntelliSense müssen Sie beim Schreiben trotzdem nicht verzichten. Mit bedingter Kompilierung schaltet ein einziger Schalter das Modul zwischen beiden Stilen um:

#Const EARLY_WORD = False            ' True waehrend der Entwicklung, mit angehaktem Verweis

Sub MakeReport()
#If EARLY_WORD Then
    Dim wd As Word.Application
    Set wd = New Word.Application
#Else
    Dim wd As Object
    Set wd = CreateObject("Word.Application")
#End If
    wd.Visible = True
    ' ... der restliche Code ist identisch ...
End Sub

Entwickeln Sie mit EARLY_WORD = True und angehaktem Word-Verweis. Vor dem Ausliefern setzen Sie die Konstante auf False und entfernen den Haken; die Zeilen im inaktiven Zweig werden nicht kompiliert und brauchen daher keine Bibliothek. Ersetzen Sie benannte Konstanten durch eigene Const-Deklarationen, etwa Const wdExportFormatPDF As Long = 17, wie in der Const-Anleitung beschrieben. Die Datei öffnet sich dann in jeder Office-Version, ohne dass irgendwo eine MISSING-Zeile auftaucht.

Wie ExcelMaster hilft

Probleme mit Verweisen tauchen auf dem PC eines anderen auf, als Fehler in einer Zeile, die gar nicht falsch ist. Bis sie bei Ihnen ankommen, besteht die einzige Beschreibung aus einem Screenshot, laut dem Left nicht gefunden wird.

ExcelMaster liest die Verweisliste der Arbeitsmappe, findet die fehlende Bibliothek hinter dem Fehler und kann den Code auf Late Binding mit lokalen Konstanten umschreiben — damit die Datei nicht mehr davon abhängt, was auf dem PC des jeweiligen Nutzers installiert ist.

Häufig gestellte Fragen

Wie füge ich in Excel-VBA einen Verweis hinzu?

Öffnen Sie den VBA-Editor mit Alt+F11, wählen Sie Extras > Verweise, haken Sie die Bibliothek an, zum Beispiel Microsoft Word 16.0 Object Library, und klicken Sie auf OK. Ist der Menüpunkt ausgegraut, läuft ein Makro oder ist angehalten; klicken Sie zuerst auf Zurücksetzen.

Was bedeutet Can't find project or library?

Einer der Verweise des Projekts ist auf diesem PC als MISSING (deutsch: NICHT VORHANDEN) markiert, weil die Bibliothek nicht installiert ist oder nur in einer älteren Version vorliegt. Öffnen Sie Extras > Verweise, entfernen oder ersetzen Sie die fehlende Zeile und kompilieren Sie erneut. Die Zeile, die der Fehler markiert, ist meist nicht die Ursache.

Warum verursacht Left oder Date in VBA einen Kompilierfehler?

Ein defekter Verweis hindert VBA daran, Namen aufzulösen, und gängige Funktionen wie Left, Mid, Date und Format scheitern als Erste. Reparieren Sie den fehlenden Verweis, nicht die markierte Zeile.

Was ist der Unterschied zwischen einem Verweis und CreateObject?

Ein Verweis gibt dem Compiler die Typen, Konstanten und das IntelliSense der Bibliothek, muss aber auf jedem PC vorhanden sein, der die Datei öffnet. CreateObject findet das Programm zur Laufzeit ganz ohne Verweis — das ist portabler, verzichtet aber auf IntelliSense und benannte Konstanten.

Welche Verweise hat eine neue Excel-Arbeitsmappe?

Vier: Visual Basic For Applications, Microsoft Excel 16.0 Object Library, OLE Automation und Microsoft Office 16.0 Object Library. Eine Arbeitsmappe mit UserForm hat zusätzlich Microsoft Forms 2.0 Object Library.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 02.10.2026.

Verwandte Anleitungen: VBA PowerPoint · VBA Word · VBA CreateObject · VBA Outlook · VBA Dictionary · VBA Const · VBA Option Explicit · VBA Debug.Print