Anzeige
Archiv - Navigation
1332to1336
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
dynamische Button Click-Event #2
27.09.2013 15:02:34
Micha
Hallo zusammen,
ich habe im Forum einen Artikel gefunden (dynamische Button Click-Event vom 07.09.2009) der mir sehr hilft, bei dem ich jedoch noch ein Verständnisproblem habe. Ich hoffe Ihr könnt es auch mir begreiflich machen.
Es geht darum, controls dynamisch zur Laufzeit anzulegen und die Events über eine eigene Klasse abzufangen. Hier der Code aus dem Forum:
Im Klassenmodul cls_Test:
Option Explicit
Public WithEvents myCmd As MSForms.CommandButton
Private Sub myCmd_Click()
MsgBox (myCmd.Name & " gedrückt")
End Sub

Und in die Userform:

Option Explicit
Dim myColl As New Collection
Private Sub UserForm_Initialize()
Dim myClass As cls_Test
Set myClass = New cls_Test
Set myClass.myCmd = Me.Controls.Add("Forms.CommandButton.1", "cmd_Test" & 2, True)
With myClass.myCmd
.Left = 336
.Height = 24
.Top = 84
.Width = 30
.Font.Size = 18
End With
myColl.Add myClass
End Sub

Ich verstehe nicht, warum ich die Instanzen in einer Collection (o. array) "myColl" sammeln muss. Ohne dies funktioniert das Eventhandling nicht.
Beschreibung des Code-Schreibers:

...Damit das auch für mehrere geht, benutze ich noch eine eine Collection, in der
alle Steuerelemente, die der Klasse zugeordnet, gesammelt werden...

Mit "Set myClass = New cls_Test" instanziere ich doch ein Objekt der Klasse, welches deren Eigenschaften erbt. Wenn dieses Control ein Event auslöst, muss es dem Control doch egal sein, ob es in irgendeiner Collection gesammelt wurde?!
Wenn mir da jemand auf die Sprünge helfen könnte, würde meine Dankbarkeit grenzenlos sein! ;)
Danke vorab
Micha

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamische Button Click-Event #2
27.09.2013 15:53:39
Luschi
Hallo Micha,
hier eine Erklärung: Die einzige Aufgabe dieser Collection ist es, die Referenz auf diese Klasse
(Set myClass...) aufrecht zu erhalten.

For i = 2 to 22
Set myClass = New cls_Test
Set myClass.myCmd = Me.Controls.Add("Forms.CommandButton.1", "cmd_Test" & i, True)
With myClass.myCmd
.Left = 336
.Height = 24
.Top = 84 + (i * 15)
.Width = 30
.Font.Size = 18
End With
myColl.Add myClass
Next i
Ohne die Collection würde:
Set myClass = New cls_Test
die vorherige Klasse wieder ins Nirwana schicken. Mann/Frau könnte dazu auch ein Dictionary nehmen, aber da brauchte man noch einen Extra-Schlüsselelement.
Gruß von Luschi
aus klein-Paris
PS: siehe http://www.richtig-einsteigen.de/downloads/5-413c25.pdf

Anzeige
AW: dynamische Button Click-Event #2
30.09.2013 14:05:19
Micha
Hallo Luschi,
danke für Deine Antwort und das pdf! Das pdf werde ich mir mal zu gemüte führen.
Ich hatte mir schon sowas gedacht, aber ich bin ehrlich gesagt davon ausgegangen, dass sich eine Instanz selbst merkt, wer sein "parent" ist (ohne solche Krücken anwenden zu müssen). Und ich müsste mich schon sehr täuschen, aber bei Hochsprachen wie Visual C++ und Delphi funktioniert das doch auch (ohne Krücken)?!
Scheint als wären meine abgespeicherten Vorurteile gegenüber VBA-Klassen nicht ganz ungerechtfertigt, aber spätestens nach der pdf-Lektüre werde ich es ja wissen...
Also danke nochmal!
Micha
Anzeige

71 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige