Makro 'verstecken'

Grüezi

Ich habe in einem Modul zwei (interessante) Makros. Ich möchte nicht, dass das zweite Makro („ErinnerungAnzeigen“) für den User sichtbar ist, wenn er „Makro ausführen“ aufruft. Dieses zweite Makro soll nur durch das erste Makro („Erinnerungeingeben“) aufgerufen werden können.
Es besteht sonst die Gefahr, dass man aus Versehen das zweite Makro startet und damit eine bereits erfasste Erinnerungszeit wieder löscht.
Weiss jemand von Euch, wie man ein Makro für den User unsichtbar macht?
Vielen Dank für Eure Bemühungen und viele Grüsse
Niclaus

Dim strErinnerungstext As String
Dim strErinnerungszeit As String

Sub ErinnerungEingeben()
 Dim strX As String
 strX = Trim$(Left$(strErinnerungszeit, 5) & " " & strErinnerungstext)
 strX = InputBox$("Erinnerungszeit und Hinweistext" & Chr(13) & \_
 "eingeben im Format" & Chr(13) & Chr(13) & "SS:MM TEXT", \_
 "Erinnerungsfunktion", strX)
 If strX = "" Then Exit Sub
 strErinnerungszeit = Left$(strX, InStr(strX, " ") - 1) & ":00"
 strErinnerungszeit = Replace(strErinnerungszeit, ".", ":")
 'falls Zeit mit . statt mit : eingegeben worden wäre
 strErinnerungstext = Mid$(strX, InStr(strX, " ") + 1)

 Application.OnTime TimeValue(strErinnerungszeit), "ErinnerungAnzeigen"
End Sub

Sub ErinnerungAnzeigen()
 Dim strZeitFormatiert
 strZeitFormatiert = Format(strErinnerungszeit, "hh:mm") & " h"
 MsgBox strZeitFormatiert & Chr(13) & Chr(13) & strErinnerungstext, 64, "Erinnerung"
 strErinnerungszeit = ""
 strErinnerungstext = ""
End Sub

Ich habe in einem Modul zwei (interessante) Makros. Ich möchte
nicht, dass das zweite Makro („ErinnerungAnzeigen“) für den
User sichtbar ist, wenn er „Makro ausführen“ aufruft. Dieses
zweite Makro soll nur durch das erste Makro
(„Erinnerungeingeben“) aufgerufen werden können.

Grüezi Niclaus,

ein Weg:

Private Sub ErinnerungAnzeigen()

Gruß
Reinhard

ein Weg:
Private Sub ErinnerungAnzeigen()

Salü Reinhard
Wie immer suuuuper! Vielen Dank.

Gleich noch eine andere Frage. Ich habe in der Hilfe zu Private folgendes gelesen: „Wird Static nicht angegeben, so bleiben die Werte lokaler Variablen zwischen den Aufrufen nicht erhalten.“ Das hab ich auch immer gemeint, es gehe nur mit Static.

In den Makros, die ich oben aufgeführt habe, bleiben die Werte der Variablen auch ohne „Static“ erhalten. Hängt das damit zusammen, dass die beiden Variablen strErinnerungstext und strErinnerungszeit vor den Makros definiert sind?

Vielen Dank. Und endlich wieder mal ein paar richtig schön kühle und feuchte Tage übers Wochenende wünscht Dir
Niclaus

Hallo Niclaus,

Gleich noch eine andere Frage. Ich habe in der Hilfe zu
Private folgendes gelesen: „Wird Static nicht angegeben, so
bleiben die Werte lokaler Variablen zwischen den Aufrufen
nicht erhalten.“ Das hab ich auch immer gemeint, es gehe nur
mit Static.

ähem, Hüstel, ich hab an sich privat noch nie „Private“ benutzt, in einer evtl. Kombination mit Static auch nicht, macht ja nix, wird ja in der Hilfe erklärt :smile:

In den Makros, die ich oben aufgeführt habe, bleiben die Werte
der Variablen auch ohne „Static“ erhalten. Hängt das damit
zusammen, dass die beiden Variablen strErinnerungstext und
strErinnerungszeit vor den Makros definiert sind?

Ja.

Man kann innerhalb einer PROZEDUR Variablen mit Static deklarieren.
Quasi wie mit Dim.

Beim nächsten Prozeduraufruf haben die variablen noch den alten Wert vom vorigen Aufruf.
Das gilt aber NUR in dieser Prozedur. In anderen Prozeduren ist diese Variable unbekannt.

Deine beiden Variablen hast du indem du sie oben hingeschrieben hast Public gemacht. Alle anderen Prozeduren „kennen“ sie deshalb. Und sie behalten auch ihren Wert. Den halt auch jede Prozedur ändern kann.

Ich denke, ich habe das Wesentliche korrekt rübergebracht, da kann Thomas nicht meckern, obwohl er das natürlich viel besser weiß und ausdrücken kann.

Letztlich geht es darum, die „Gültigkeit“ von Variablen, Prozeduren zu regeln, dies geschieht durch Public, Private, Static.

ich hoffe ich konnte mich halbwegs verständlich machen :smile:

Gruß
Reinhard

Vielen Dank. Und endlich wieder mal ein paar richtig schön
kühle und feuchte Tage übers Wochenende wünscht Dir
Niclaus

Ich denke, ich habe das Wesentliche korrekt rübergebracht,
ich hoffe ich konnte mich halbwegs verständlich machen :smile:

Beides bestens gelungen.
Vielen Dank und viele Grüsse
Niclaus

Grüezi Niclaus

Grüezi

(täusche ich mich, oder sind wir Landsmänner?)

Ich habe in einem Modul zwei (interessante) Makros. Ich möchte
nicht, dass das zweite Makro („ErinnerungAnzeigen“) für den
User sichtbar ist, wenn er „Makro ausführen“ aufruft.

Weiss jemand von Euch, wie man ein Makro für den User
unsichtbar macht?

Du kannst auch ein zweites Modul erstellen und dort ganz oben die folgenden Zeilen verwenden:

Option Explicit
Option Private Module

So bleibt der komplette Code des Moduls ausserhalb desselben unsichtbar.
Wenn Du aus einem anderen Modul auf diese Subs zugreifen willst musst Du dann dem Aufruf den Namen des ‚privaten‘ Modusl voransetzen:

DeinPrivateModul.DeineSub()

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi

(täusche ich mich, oder sind wir Landsmänner?)

Sind wir!

Du kannst auch ein zweites Modul erstellen und dort ganz oben
die folgenden Zeilen verwenden:

Option Explicit
Option Private Module

Vielen Dank und schönes WE
Niclaus