Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03268.jsonl.gz/966

Das Kompilieren von Code vor dem Ausführen ist Best Practice beim Codieren. VBA wertet Ihren Code aus, um sicherzustellen, dass alle Anforderungen für eine erfolgreiche Ausführung erfüllt sind. Das Kompilieren hilft, eventuell auftretende Laufzeitfehler zu minimieren. Wenn ein Kompilierfehler auftritt und einer dieser Fehler möglicherweise darin besteht, dass Sub oder Function nicht definiert ist, wird eine Fehlermeldung für einen Kompilierfehler angezeigt. Der Fehler tritt auf, wenn wir versuchen, ein Sub oder eine Funktion aufzurufen, die nicht definiert ist. In diesem Artikel behandeln wir die möglichen Gründe für das Auftreten dieses Fehlers und wie der Fehler behoben werden kann.
Hier sind die anderen möglichen Ursachen, warum der Fehler auftritt:
- Falsch geschriebener Prozedurname
- Fehlende Prozedur
- Angabe einer Prozedur, die für die aufrufende Prozedur nicht sichtbar ist.
Was verursacht den Fehler?
Bevor Sie mit der Behebung des Fehlers fortfahren, müssen Sie die Fehlerursache in Ihrem VBA-Code identifizieren.
Ursache 1: Falsch geschriebenes sub oder Function
Dies ist der häufigste Grund, warum der Fehler „Unter oder Funktion nicht definiert“ auftritt.
Nehmen wir den folgenden Code als Beispiel.
Option Explicit Sub CalculateToMinutes() Dim dblMins As Double Dim dbVal As Double dbVal = shtTabelle.Range("A1").Value dblMins = ConvertHoursToMins(dbVal) Debug.Print dbVal MsgBox "Minute: " & dblMins End Sub Function ConvertHoursToMinute(dblHours As Double) As Double ConvertHoursToMinute = dblHours * 60 End Function
Im obigen Beispiel haben wir eine Funktion erstellt, die Stunden in Minuten umwandelt.
In der Subroutine versuchen wir, die Funktion aufzurufen, um die Anzahl der Minuten eines bestimmten Werts im Bereich A1 zu erhalten. Wenn wir den Code ausführen, tritt der Fehler Sub or Function not defined auf. Dies liegt daran, dass die aufgerufene Funktion falsch geschrieben ist.
Lösung:
Überprüfen und geben Sie die richtige Schreibweise des Subs oder der Funktion ein, die Sie aufrufen möchten. Versuchen Sie den folgenden Code.
Option Explicit Sub CalculateToMinutes() Dim dblMins As Double Dim dbVal As Double dbVal = shtTabelle.Range("A1").Value dblMins = ConvertHoursToMinute(dbVal) Debug.Print dbVal MsgBox "Minute: " & dblMins End Sub Function ConvertHoursToMinute(dblHours As Double) As Double ConvertHoursToMinute = dblHours * 60 End Function
Ursache 2: Sub oder Funktion fehlt
Es ist möglich, dass die aufgerufene Prozedur nicht existiert. In einem großen Tool mit vielen Funktionen und Unterprogrammen besteht die Möglichkeit, dass Sie die Prozedur versehentlich löschen oder einfach vergessen, sie zu schreiben.
Lösung:
Nachdem Sie überprüft haben, ob die Prozedur nicht vorhanden ist, müssen Sie sie nur noch neu schreiben.
Tipps. Speichern Sie immer eine Version des Excel-Tools, mit der Sie arbeiten.
Ursache 3: Nicht verfügbares Verfahren
Wenn es nicht auf die Schreibweise oder das Vorhandensein der Prozedur ankommt, könnte dies die Ursache des Fehlers sein. Dies ist der Fall, wenn die Prozedur für die aufrufende Prozedur in derselben Arbeitsmappe nicht verfügbar ist. Private Prozeduren können nur von Prozeduren aufgerufen oder aufgerufen werden, die sich im selben Modul befinden.
Im folgenden Beispiel ruft die Subroutine CalculateToMinutes die Funktion ConvertHoursToMinute auf, die sich in einem anderen Modul befindet. Die Funktion ist privat und kann daher nicht von der Subroutine CalculateToMinutes aufgerufen werden.
Lösung:
Entweder platzieren Sie die beiden Prozeduren in einem Modul oder Sie entfernen das Wort Private vor der Funktion.
Benötigen Sie einen VBA Programmierer?
Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).
Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular.