Subs im Makro-Menü Alt+F8 ausblenden

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Subs im Makro-Menü Alt+F8 ausblenden

#1

Beitrag von d'r Bastler »

Moin allerseits,

damit Subs untereinander kommunizieren können, ob per Call (obsolet) oder Parameter darf man sie nicht als Private deklarieren. Dann sind sie (also die ohne Parameter) aber auch im Makro-Menü Alt+F8 sichtbar, was nicht unbedingt gewünscht ist. Folgender Trick hilft:
Option Private Module
nach dem obligatorischen
Option Explicit
in den ersten Zeilen eines Moduls und schon sind die Subs im Modul unsicht- aber ansprechbar.

Viel Spaß damit!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
xlKing
Beiträge: 37
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 35 Mal
Kontaktdaten:

Re: Subs im Makro-Menü Alt+F8 ausblenden

#2

Beitrag von xlKing »

Hi zusammen,

Option Private Module kann noch viel mehr als nur das Ausblenden aus dem Makromenü. Ich nutze es gern um zu vermeiden, dass im Modulkopf befindliche Globale Variablen von anderen Workbooks aus überschrieben werden können. Oder öffentliche Subs und Functions von einem anderen Projekt aus aufgerufen werden können. Diese sollen bei mir nur im aktuellen Projekt global sein. Damit entspricht diese Option in etwa dem Schlüsselwort Friend. Während das Schlüsselwort in Standardmodulen nicht funktioniert, klappt diese Alternative wunderbar und blendet das Modul sogar im Objektexplorer aus - sofern man sich in einem anderen Workbook befindet. Letztlich vermeidet das auch eventuelle Kompilierungsfehler, falls in zwei geöffneten VBA-Projekten eine Globale Variable gleichen Namens vorkommt. Außerdem vermeidet man so, dass eine für VBA bestimmte Public Function vielleicht als Worksheet-Function missbraucht wird und gar im Formel-Assistenten erscheint.

Merke: Globale Variablen, Konstanten und Funktionen, die nur im aktuellen Projekt gebrauch werden, gehören bei mir schon seit längerem in ein separates Modul vom Typ Option Private Module.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag (Insgesamt 2):
d'r Bastler, thowe
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Subs im Makro-Menü Alt+F8 ausblenden

#3

Beitrag von thowe »

Hallo Mr. K!

Danke für deinen - für mich, sehr - wertvollen Beitrag.
der das Motto hat: "write code for the joy of it". I love simple, elegant syntax to put amazing functionality at your/my fingertips...

Das mit Option Private Module kannte ich nicht.

Ich rufe, meiner Konvention folgend, beispielsweise - immer - so auf:

Code: Alles auswählen

'Call is obsolet, maybe depreciated
Call BOOTSRAP_MySystemSetting.GetDefaultParameter(param1 param2, [optionalParam1])
Meine Frage dazu:
Wenn ich derart Vorgehe, dann kann ich - doch - nicht eine globale Variable einer anderen Arbeitsmappe überschreiben, oder? Es sei denn, in der anderen Arbeitsmappe existiert auch ein Modul Namens BOOTSRAP_MySystemSetting mit der Prozedur GetDefaultParameter().

LG
xlKing
Beiträge: 37
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 35 Mal
Kontaktdaten:

Re: Subs im Makro-Menü Alt+F8 ausblenden

#4

Beitrag von xlKing »

Hallo Thowe,

ich kann dich beruhigen. So leicht überschreibt man auch wieder nicht globale Variablen in anderen Arbeitsmappen. Das muss man schon bewusst wollen. Dazu muss zumindest ein Verweis auf das VBA-Project der anderen Mappe gesetzt werden. Oder die andere Mappe muss ein AddIn sein.

Außerdem darf die angesprochene Variable nur im anderen Projekt, nicht aber im eigenen vorhanden sein. sonst bevorzugt er immer die Public Variable im eigenen Projekt und lässt die andere in Frieden. Aber wenn es ganz dumm kommt und man hat eine Variable, die man nur mal eben als Variant verwendet, ohne sie zuvor zu deklarieren, kann es zu diesem Phänomen kommen, wenn die globale Variable gleichen Namens sich in einem verknüpften Workbook oder in einen AddIn befindet.

Gleiches gilt für deine Funktion. Wenn du zwei Module mit gleichem Namen in verschiedenen Mappen hast, bevorzugt er zuerst das eigene Modul und die eigene Funktion. Nur wenn im eigenen Projekt das Modul nicht exisitert greift er auf das entsprechende Modul im verknüpften Workbook zurück. Willst du hingegen immer das andere Modul ansprechen, auch wenn das eigene Projekt ein gleiches Modul hat, musst du den Namen des VBAProjekts davorschreiben: VBAProject2.Modul1.Hallo

Spiel einfach mal ein bisschen mit gleichen Namen in unterschiedlichen Projekten rum. Dann entfernst du bestimmte Namen und Module im eigenen Projekt wieder, lässt den Aufruf aber unangetastet und du wirst du sehen was ich meine.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag:
d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: Semrush [Bot] und 0 Gäste