Excel VBA
13.05.2020 10:55:33
Andreas
Das habe eine Art Kalenderanwendung mit Excel erzeugt, so dass jeden Monat ein neues Sheet dazukommt.
Auf dem Start-Sheet habe ich eine Umschaltfläche (toggle button), d.h. ein Active-X control, das dann auf jeder Kopie auch wieder vorhanden ist.
Leider gehört der Code für button_click und button_mousedown direkt zum Sheet statt zum Modul.
Innerhalb eines Moduls kann ich eine (private) Sub von einer anderen aufrufen.
Das erste Problem war, dass der Toggle-Button bei jedem Klick seinen Zustand wechselt. Ich kann im Code von buttonName_click keine Prüfung machen, die dann entscheidet, ob der Button seinen Zustand tatsächlich ändert. Buttonname_click macht das bei einem toggle-button sofort.
Daher habe ich diese Prüfung in buttonname_Mousedown implementiert, buttonname_click leer gelassen und rufe von MouseDown abhängig vom Prüfungsergebnis buttonName_click auf oder eben nicht. Das hat dann nur noch die Funktion, den Zustand zu wechseln wenn es angesagt ist.
Abhängig von dem Ergebnis der Prüfung rufe ich dann u. U. MeineSub_ausblenden oder meineSub_einblenden auf.
Diesen Code habe ich in Modul1 kopiert und auf dem Sheet erstmal auskommentiert, damit er nicht bei jeder Kopie des Sheets mit kopiert wird. Solange der Code im Sheet nicht auskommentiert ist und ich die Subs dort nutze, funktioniert auch alles.)
Nun rufe ich MeineSub_ausblenden von ButtonName_Mousedown auf:
Application.run "modul1.MeineSub_ausblenden"
Leider muss ich darin aber auf eine Eigenschaft des Buttons zugreifen. Wie geht das? Kann ich in Modul1.MeineSub_ausblenden wissen von welchem Sheet der Aufruf kommt und die Eigenschaft dessen toggle-Buttons setzen?
Normale Buttons gehen direkt auf Subs in Modul1.
Leider hat man den Wechsel im Aussehen (deutlich bei aktiviertem Button, dezent bei de-aktiviertem Button) in normalen Buttons nicht zur Verfügung.
Es stört mich, dass, so wie es momentan steht, die notwendigen Subs zum ToggleButton bei jeder Kopie des Sheets auch noch mal kopiert werden, da die Funktionalität immer gleich ist und es keinen Grund für diese Vervielfältigung von Code gibt.
Danke für Ideen wie ich das effizienter gestalten kann.