Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
FlxControls - Teil 1 (Viele Controls - ein Ereignis)
zurück: FlxControls - Teil 2 (Die FlxControls) weiter: Warnung vor Gender-AddIn Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
KeepCoolMan
VBA-NonExpert ;) Office 2010


Verfasst am:
25. Feb 2012, 16:47
Rufname: Thomas
Wohnort: Celle


FlxControls - Teil 1 (Viele Controls - ein Ereignis) - FlxControls - Teil 1 (Viele Controls - ein Ereignis)

Nach oben
       Version: (keine Angabe möglich)

Viele Controls – ein Ereignis

Kennst du folgende Situation?
Du hast mit viel Mühe ein oder mehrere UserForms gebastelt, mit etlichen Controls TextBoxen, Buttons, etc.

Viele Controls sollen immer das Gleiche tun, beim Klick das Datum prüfen oder den ersten Buchstaben groß schreiben oder beim Klick die Farbe ändern oder was auch immer.

Das ist erst Mal einfach, für jedes der 128 Controls wird eine btn_Click-Prozedur geschrieben und für die 200 TextBoxen noch die tbx_Change-Prozedur und alle rufen dann „ihre externe“ Prozedur auf. Prima.

Aber natürlich sehr aufwändig. Besser wäre es, wenn jedes Control das gleiche Ereignis auslöst. Auch das ist im Prinzip recht einfach.

Teil 1 - Viele Controls, ein Ereignis

Eine eigene Klasse basteln, die das benötigte Ereignis für ein Control auslöst und dann die Controls an diese Klasse binden und fertig. Das ganze könnte so aussehen:

Zuerst müssen wir eine Objekt-Variable vom Typ des Controls deklarieren. Sie soll auf Ereignisse reagieren, also WithEvents. Wenn wir später mehrere Buttons hierüber behandeln wollen, müssen wir die Klassen-Objekte in einer Auflistung sammeln. Das machen wir am einfachsten im Konstruktor unserer Klasse, Class_Initialize, in dem die Auflistung statisch deklariert und das Objekt selbst auch gleich dieser Auflistung hinzugefügt wird. Dann brauchen wir nur noch auf das Ereignis „unseres“ Controls reagieren. Hier ein Beispiel für einen CommandButton mit Click-Ereignis:

Klassenmodul btnClass
Code:
Option Explicit

Public WithEvents Button As MSForms.CommandButton

Private Sub Class_Initialize()
    Static collButton As New Collection
    collButton.Add Me
End Sub

Private Sub Button_Click()
    MsgBox "Click by: " & Button.Name
End Sub


Um jetzt mehrere CommandButton aus einem Formular mit diesem einen Click-Ereignis zu versehen, brauchen wir nur noch den jeweiligen CommandButton in unseren Button packen und fertig.

Stellen wir uns dazu ein UserForm mit einem Frame und in diesem Frame mehrere CommandButtons vor. Zuerst brauchen wir hier eine Variable vom Typ unserer Klasse btnClass. Dann durchsuchen wir das Frame und erzeugen bei jedem CommandButton ein neues Objekt „unserer“ btnClass (wir erinnern uns – der Konstruktor packt das Objekt gleich in die Auflistung, es geht also nicht verloren). Dann weisen wir dem Button in diesem neuen Objekt den CommandButton aus dem Frame zu. Das war’s. Jetzt wird jeder CommandButton aus dem Frame über unsere Button-Klasse das dortige Click-Ereignis benutzen.

Der beschriebene UserForm-Code könnte so aussehen – auch hier natürlich gleich alles im Konstruktor:

Formular UserForm1
Code:
Option Explicit

Private myBtn As btnClass

Private Sub UserForm_Initialize()

    Dim ctrl As Control
    For Each ctrl In Frame1.Controls
        If TypeOf ctrl Is MSForms.CommandButton Then
            Set myBtn = New btnClass
            Set myBtn.Button = ctrl
        End If
    Next
       
End Sub


Problem…

Jetzt soll aber noch aufgrund bestimmter Situationen für bestimmte Controls was anderes passieren, anstatt der vorherigen Prozedur. Oder sogar zusätzlich zur vorhandenen. Wird schon schwieriger… Klar, alles in eine externe Prozedur umleiten, die von allen Controls benutzt wird, ein paar If‘s oder Select‘s und prüfen, welches Control das ausgelöst hat und dann blablabla…

Jetzt kommen noch ein paar Labels dazu, die entweder alle blau oder bei Bedarf alle rot sein müssen. und die sollen auch noch anklickbar sein. Also wieder ein paar lbl_Click-Prozeduren hinzugefügt – was wäre es schön, wenn alle den gleichen Namen haben könnten und nur eine Click-Prozedur nötig wäre… Aber das will ja das UserForm nicht.

Genau vor diesem Problem stand ich und ich dachte mir, dass muss doch auch anders, einfacher, flexibler und vor allem dynamisch gehen…

Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Hilfe: Word 2010 - Makro - Warum werden Zeilen zum Teil eingerückt? 2 pooh 110 26. März 2014, 14:26
Gast Word 2010 - Makro - Warum werden Zeilen zum Teil eingerückt?
Keine neuen Beiträge Word VBA Programmierung (Makros): Wert in Combobox (extra Formular) soll Ereignis auslösen 2 friedrichshain 176 10. Jul 2013, 08:49
IlmStubbe Wert in Combobox (extra Formular) soll Ereignis auslösen
Keine neuen Beiträge Word Hilfe: Grafik in Word (Verknüpfung) wird zum Teil nicht gedruckt 0 rufi 181 14. Jan 2013, 16:14
rufi Grafik in Word (Verknüpfung) wird zum Teil nicht gedruckt
Keine neuen Beiträge Word Gestaltungselemente: Ergebnis bzw. Teil einer Formel doppelt unterstreichen 5 PgUp 9654 06. Feb 2012, 03:43
EPsi1 Ergebnis bzw. Teil einer Formel doppelt unterstreichen
Keine neuen Beiträge Word VBA Programmierung (Makros): Datumsauswahl-Inhaltssteuerelement Ereignis beim Verlassen 4 Ledge 1410 01. Feb 2012, 18:12
r.mueller Datumsauswahl-Inhaltssteuerelement Ereignis beim Verlassen
Keine neuen Beiträge Word Formate: Teil der Bildunterschrift im Abbildungsverzeichnis anzeigen 1 Stefanie_Neu 1080 22. Aug 2011, 01:28
MarkMH_K Teil der  Bildunterschrift im Abbildungsverzeichnis anzeigen
Keine neuen Beiträge Word Hilfe: Einen Teil der Fußzeile schützen 0 kulahua 269 26. Apr 2011, 14:20
kulahua Einen Teil der Fußzeile schützen
Keine neuen Beiträge Word VBA Programmierung (Makros): Einen Teil der Fußzeile schützen 0 kulahua 506 18. Apr 2011, 13:37
kulahua Einen Teil der Fußzeile schützen
Keine neuen Beiträge Word VBA Programmierung (Makros): Change Ereignis für das Dokument -bei Änderung der Selection 7 Gast 1388 04. März 2011, 10:40
Keen Tied Change Ereignis für das Dokument -bei Änderung der Selection
Keine neuen Beiträge Word Gestaltungselemente: Referenz auf einen Teil einer Bildbeschriftung 1 _Micha_ 1281 01. Okt 2010, 17:07
Gast Referenz auf einen Teil einer Bildbeschriftung
Keine neuen Beiträge Word VBA Programmierung (Makros): Controls durchgehen 11 palmenman88 404 03. Sep 2009, 13:16
CHF Controls durchgehen
Keine neuen Beiträge Word Gestaltungselemente: Word 2007 - Teil einer Grafik ausschneiden - geht das? 3 MBMBMB 16466 08. Dez 2008, 14:05
Nix Ahnung Word 2007 - Teil einer Grafik ausschneiden - geht das?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Frontpage Forum