VBA – Private und öffentliche Prozeduren (Subs und Funktionen)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on März 31, 2023

In diesem Tutorial erklären wir Ihnen den Unterschied zwischen öffentlichen und privaten Deklarationen in VBA und wie Sie Module als privat definieren können.

Öffentliche im Vergleich zu privaten Unterprozeduren

Prozeduren (Subs und Funktionen) können in VBA entweder als privat oder öffentlich deklariert werden. Wenn sie öffentlich sind, können Sie sie im Excel-Makrofenster sehen und sie können von überall in Ihrem VBA-Projekt aufgerufen werden. Wenn sie privat sind, sind sie im Excel-Makrofenster nicht sichtbar und können nur innerhalb des Moduls, in dem sie deklariert wurden, mit normalen Methoden verwendet werden (für den Zugriff auf private Prozeduren aus anderen Modulen siehe unten in diesem Artikel).

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

Hinweis: Variablen und Konstanten können ebenfalls öffentlich oder privat sein.

Excel-Makrofenster

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

vba sub in Makrofenster

Diese werden als öffentliche Prozeduren betrachtet. Sie können Prozeduren ausdrücklich als öffentlich definieren, indem Sie „Public“ vor der Sub-Anweisung hinzufügen:

Public Sub HalloWelt()
   MsgBox "Hallo Welt"
End Sub

Wenn Sie die Prozedur nicht als öffentlich definieren, wird sie als öffentlich angesehen.

Um eine Prozedur als privat zu deklarieren, fügen Sie einfach „Private“ vor die Sub-Anweisung der Prozedur:

Private Sub HalloJedermann()
MsgBox "Hallo jedermann"
End Sub

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

vba private unterprozedur

Prozeduren mit Argumenten

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

Sub Hallo(strName as string)
   MsgBox "Hallo " & strName
End Sub

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

Funktionen werden ebenfalls nie im Makrofenster erscheinen, unabhängig davon, ob sie als öffentlich deklariert sind.

vba prozeduren mit argumenten

Öffentliche Funktionen können in Excel direkt in einem Arbeitsblatt als „Benutzerdefinierte Funktion“ (BDF) verwendet werden. Dabei handelt es sich im Grunde um 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 benutzerdefinierte funktion

Verwendung von Prozeduren zwischen Modulen in Ihrem VBA-Projekt

Öffentliche Prozeduren können von jedem Modul oder Formular innerhalb Ihres VBA-Projekts aufgerufen werden.

vba benutzerdefinierte sub aufrufen

Der Versuch, eine private Prozedur von einem anderen Modul aus aufzurufen, führt zu einem Fehler (Hinweis: siehe eine Umgehungslösung unten in diesem Artikel).

vba private sub aufrufen

Hinweis: Öffentliche Prozeduren und Variablen in Klassenmodulen verhalten sich etwas anders und werden in diesem Artikel nicht behandelt.

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

Wenn zwei oder mehr Prozeduren denselben Namen haben und als öffentlich deklariert sind, erhalten Sie beim Ausführen des Codes einen Kompilierfehler mit der Meldung „Mehrdeutiger Name“.

vba mehrdeutiger prozedurenname

Private Module

Standardmäßig sind die Module öffentlich.

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

Option Private Module

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

vba privates modul

Unterprozeduren (Subs) erscheinen nicht im Makrofenster, können aber dennoch im VBA-Projekt verwendet werden.

Zugriff auf eine private Prozedur aus einem anderen Modul

Wie bereits erwähnt, kann auf private Prozeduren in anderen Codemodulen nicht mit „normalen“ Methoden zugegriffen werden. Sie können jedoch auf private Prozeduren zugreifen, indem Sie den in VBA verfügbaren Befehl Application.Run verwenden.

Betrachten Sie die folgenden 3 Module.

vba private sub aufrutmethoden

Modul2 ist ein privates Modul mit einer öffentlichen Unterprozedur, während Modul3 ein öffentliches Modul mit einer privaten Unterprozedur ist.

In Modul1 können wir HalloWelt aufrufen. Die Option Private Module am oberen Rand hindert uns nicht daran, die Sub aufzurufen, denn sie dient lediglich dazu, die Sub im Makrofenster auszublenden.

Wir brauchen auch die Call-Anweisung nicht, denn sie dient nur dazu, den Code leichter lesbar zu machen.

Der Code könnte auch wie folgt aussehen:

Sub HallovonPrivatAufrufen()
'eine Sub aus einem privaten Modul aufrufen
   HalloWelt
End Sub

Wir können die Sub HalloWelt auch mit dem VBA-Befehl Application.Run ausführen.

In Modul3 wurde die Sub GutenMorgenWelt jedoch als privat deklariert. Sie können sie nicht von einem anderen Modul aus mit „normalen“ Mitteln, d.h. der Call-Anweisung, aufrufen.

Sie müssen den Befehl Application.RunCommand verwenden, um eine private Unterprozedur von einem anderen Modul aus auszuführen.

Sub GutenMorgenAufrufen()
'eine private Sub von einem öffentlichen aus Modul ausführen
   Application.Run ("GutenMorgenWelt")
End Sub

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

Wenn wir versuchen, die Anweisung Call zu verwenden, um die Unterprozedur GutenMorgenWelt auszuführen, würde ein Fehler auftreten.

vba private sub kopilierfehler

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples