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 Mod2von angeben, aber Sie müssen ihn als Mod2.MyID qualifizieren, um es in Mod1anzugeben.

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.