Vermeiden von Benennungskonflikten
Ein Namenskonflikt tritt auf, wenn Sie versuchen, einen zuvor definierten Bezeichner zu erstellen oder zu verwenden. In einigen Fällen generieren Benennungskonflikte Fehler wie mehrdeutiger Name erkannt oder Doppelte Deklaration im aktuellen Bereich. Benennungskonflikte, die nicht erkannt werden, können zu Fehlern in Ihrem Code führen, die zu fehlerhaften Ergebnissen führen, insbesondere wenn Sie nicht explizit alle Variablen vor der ersten Verwendung deklarieren.
Die meisten Namenskonflikte lassen sich vermeiden, indem Sie sich mit der Bereichsdefinierung, der privaten Modulebene und der öffentlichen Modulebene vertraut machen.
Ein Namenskonflikt kann auftreten, wenn ein Bezeichner:
- auf mehreren Bereichsdefinierungsebenen sichtbar ist.
- auf derselben Ebene zwei unterschiedliche Bedeutungen hat.
Beispielsweise können Prozeduren in separaten Modulen denselben Namen haben. Daher können Sie eine Prozedur mit der Bezeichnung MySub
in Modulen mit den Bezeichnungen Mod1
und Mod2
definieren. Wenn die einzelnen Prozeduren nur von anderen Prozeduren im eigenen Modul aufgerufen werden, treten keine Konflikte auf. Ein Fehler kann jedoch auftreten, wenn MySub
von einem dritten Modul aufgerufen wird und keine Qualifikation zur Unterscheidung zwischen den beiden MySub
Prozeduren bereitgestellt wird.
Die meisten Namenskonflikte können gelöst werden, indem jedem Bezeichner ein Qualifizierer vorangeht, der aus dem Modulnamen und ggf. einem Projektnamen besteht. Beispiel:
YourProject.YourModule.YourSub MyProject.MyModule.MyVar
Der vorangestellte Code ruft die Sub -Prozedur YourSub
auf und übergibt MyVar
als Argument. Verwenden Sie eine beliebige Kombination von Qualifizierern, um identische Bezeichner zu unterscheiden.
Visual Basic ordnet die einzelnen Verweise mit der "treffendsten" Deklaration eines passenden Bezeichners einem Bezeichner zu. Wenn MyID
z. B. in zwei Modulen in einem Projekt (Mod1
und Mod2
) als Öffentlich deklariert ist, können Sie den MyID
deklarierten in Mod2
ohne Qualifikation innerhalb Mod2
von angeben, aber Sie müssen ihn als Mod2.MyID
qualifizieren, um es in Mod1
anzugeben.
Dies gilt auch, wenn Mod2
sich in einem anderen Projekt befindet, auf das direkt verwiesen wird. Wenn Mod2
sich jedoch in einem indirekt referenzierten Projekt befindet, d. h. in einem Projekt, auf das durch das Projekt verwiesen wird, auf das Sie direkt verweisen, müssen Verweise auf die Mod2
Variable namens MyID
immer mit dem Projektnamen qualifiziert werden. Wenn Sie auf ein drittes Modul verweisen MyID
, auf das direkt verwiesen wird, wird die Übereinstimmung mit der ersten Deklaration hergestellt, die bei der Suche gefunden wird:
- Projekte, auf die direkt verwiesen wird, in der Reihenfolge, in der sie im Dialogfeld Verweise des Menüs Extras angezeigt werden.
- Module der einzelnen Projekte. Beachten Sie, dass für die Module im Projekt keine immanente Reihenfolge existiert.
Sie können die Namen von Objekten einer Hostanwendung, beispielsweise R1C1 in Microsoft Excel, nicht auf verschiedenen Bereichsdefinierungsebenen wiederverwenden.
Tipp
Typische Fehler, die durch Benennungskonflikte verursacht werden, sind mehrdeutige Namen, doppelte Deklarationen, nicht deklarierte Bezeichner und nicht gefundene Prozeduren. Indem Sie jedes Modul mit einer Option Explicit-Anweisung beginnen, um explizite Deklarationen von Variablen zu erzwingen, bevor sie verwendet werden, können Sie potenzielle Namenskonflikte und bezeichnerbezogene Fehler vermeiden.
Siehe auch
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.