VBA Private vs. Public Procedures (Subs & Functions)

In diesem Tutorial wird der Unterschied zwischen öffentlichen und privaten Deklarationen in VBA erklärt und wie Module als privat angegeben werden.

Öffentliche vs. private Nebenverfahren

Prozeduren (Sub und Functions) können in VBA entweder als Private oder Public deklariert werden. Wenn sie öffentlich sind, bedeutet dies, dass Sie sie im Excel-Makrofenster sehen und von überall in Ihrem VBA-Projekt aufrufen können. Wenn sie privat sind, können sie im Excel-Makrofenster nicht angezeigt werden und können nur innerhalb des Moduls verwendet werden, in dem sie deklariert sind (mit normalen Methoden finden Sie am Ende dieses Artikels Möglichkeiten zum Zugriff auf private Prozeduren aus anderen Modulen). .

Öffentliche Funktionen können wie integrierte Excel-Funktionen im Excel-Arbeitsblatt aufgerufen werden.

Notiz: Variablen und Konstanten können auch öffentlich oder privat sein.

Excel-Makrofenster

Standardmäßig sind Excel-Makros (die meisten VBA-Prozeduren) für Arbeitsmappenbenutzer im Makrofenster sichtbar:

Diese werden berücksichtigt Öffentlich Verfahren. Sie können Prozeduren explizit als öffentlich definieren, indem Sie „Public“ vor der Sub-Anweisung hinzufügen:

123 Öffentliches Sub HelloWorld()MsgBox "Hallo Welt"End Sub

Wenn Sie das Verfahren nicht als Öffentlich definieren, wird es als Öffentlich angenommen.

Um eine Prozedur als Privat zu deklarieren, fügen Sie einfach "Private" vor der Prozedurunteranweisung hinzu:

123 Privates Abo HelloEveryone()MsgBox "Hallo zusammen"End Sub

Das zweite Verfahren wäre für Excel-Benutzer im Makrofenster nicht sichtbar, kann aber dennoch in Ihrem VBA-Code verwendet werden.

Prozeduren mit Argumenten

Unterprozeduren können Argumente haben. Argumente sind Eingaben für die Unterprozedur:

123 Sub Hello(strName als String)MsgBox "Hallo" & strNameEnd Sub

Wenn eine Unterprozedur Argumente hat, wird sie nie im Makrofenster angezeigt, unabhängig davon, ob sie als Public deklariert ist, da es keine Möglichkeit gibt, die Argumente zu deklarieren.

Außerdem werden Funktionen niemals im Makrofenster angezeigt, unabhängig davon, ob sie als Public deklariert sind.

Öffentliche Funktionen in Excel können direkt in einem Arbeitsblatt als „User Defined Function“ (UDF) verwendet werden. Dies ist im Grunde eine benutzerdefinierte Formel, die direkt in einem Arbeitsblatt aufgerufen werden kann. Sie sind in der Kategorie „Benutzerdefiniert“ im Fenster „Funktion einfügen“ zu finden oder können direkt in eine Zelle eingegeben werden.

VBA-Programmierung | Code Generator arbeitet für Sie!

Verwenden von Prozeduren zwischen Modulen in Ihrem VBA-Projekt

Öffentliche Prozeduren können aus jedem Modul oder Formular in Ihrem VBA-Projekt aufgerufen werden.

Der Versuch, eine private Prozedur von einem anderen Modul aus aufzurufen, führt zu einem Fehler (Hinweis: Eine Problemumgehung finden Sie am Ende dieses Artikels).

Notiz: Öffentliche Prozeduren und Variablen in Klassenmodulen verhalten sich etwas anders und liegen außerhalb des Rahmens dieses Artikels.

Verschiedene Module können Prozeduren mit demselben Namen speichern, vorausgesetzt, sie sind beide privat.

Wenn zwei oder mehr Prozeduren denselben Namen haben und als öffentlich deklariert sind, erhalten Sie beim Ausführen von Code den Kompilierungsfehler "Mehrdeutiger Name erkannt".

Private Module

Standardmäßig sind Module öffentlich.

Um ein Modul privat zu machen, fügen Sie das folgende Schlüsselwort an den Anfang des Moduls.

1 Option Privates Modul

Wenn Sie ein Modul als privat deklarieren, sind alle Prozeduren im Modul für Excel-Benutzer nicht sichtbar. Funktionsprozeduren werden nicht im Fenster Funktion einfügen angezeigt, können aber dennoch in der Excel-Tabelle verwendet werden, solange der Benutzer den Namen der Funktion kennt!

Unterprozeduren werden nicht im Makrofenster angezeigt, können jedoch weiterhin innerhalb des VBA-Projekts verwendet werden.

Zugriff auf eine private Prozedur von einem anderen Modul aus

Wie oben erwähnt, sind private Prozeduren in anderen Codemodulen mit „normalen“ Methoden nicht zugänglich. Sie können jedoch auf private Prozeduren zugreifen, indem Sie die Anwendung.Ausführen Befehl in VBA verfügbar.

Betrachten Sie die folgenden 3 Module.

Modul 2 ist a Privatgelände Modul mit a Öffentlich Unterprozedur, wobei Modul3 ist Öffentlich Modul mit a Privatgelände Unterverfahren.

In Module1 können wir Hello World nennen - die Option Privates Modul oben hindert uns nicht daran, die Subprozedur aufzurufen - sie dient lediglich dazu, die Subprozedur im Makrofenster auszublenden.

Wir brauchen auch die Call-Anweisung nicht - sie ist dazu da, den Code leichter lesbar zu machen.

Der Code könnte auch wie folgt aussehen:

1234 Sub CallHelloFromPrivate()'rufen Sie ein Sub von einem privaten Modul anHallo WeltEnd Sub

Wir können die HelloWorld-Sub-Prozedur auch mit der VBA ausführen Anwendung.Ausführen Befehl.

In Module3 wurde die GoodMorningWorld-Prozedur jedoch als Privat deklariert. Sie können es nicht von einem anderen Modul aus mit „normalen“ Mitteln aufrufen, dh mit der Call-Anweisung.

Sie müssen verwenden Application.RunCommand um ein Private Sub von einem anderen Modul aus auszuführen.

1234 Sub CallGoodMorning()'Ein privates Sub von einem öffentlichen Modul ausführenApplication.Run ("GoodMorningWorld")End Sub

Beachten Sie die, wenn Sie die verwenden Application.RunCommand Befehl müssen Sie den Namen der Unterprozedur in Anführungszeichen setzen.

Wenn wir versuchen, die Call-Anweisung zu verwenden, um die GoodMorningWorld-Subprozedur auszuführen, würde ein Fehler auftreten.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave