Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1212to1216
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
Inhaltsverzeichnis

each für Klassen

each für Klassen
Alsatian
Ich erzeuge mir beim Start meiner Userform einige Klassen von Controls (da die Anzahl dynamisch erzeugt wird) und für alle Elemente der Klasse wird bei Änderung das gleiche Makro ausgeführt. Dabei habe ich den Fall, dass wenn eine Combobox aktiviert wird, alle anderen (eigentlich einer anderen Klasse daher auch kein Optionsfeld) deaktiviert werden sollen.
Userform

Private Sub UserForm_Activate()
Dim objControl As Control
Dim intIndex As Integer
For Each objControl In Controls
If TypeOf objControl Is MSForms.CheckBox And VBA.Left(objControl.name, 5) = "cb_mz"  _
Then
intIndex = intIndex + 1
ReDim Preserve obj_cb(1 To intIndex)
Set obj_cb(intIndex) = New cls_cb
Set obj_cb(intIndex).prpSet_cb = objControl
End If
Next
End Sub
Klasse

Private WithEvents mobjcb As MSForms.CheckBox
Private cb As MSForms.CheckBox
Friend Property Set prpSet_cb(ByVal obj_cb As MSForms.CheckBox)
Set mobjcb = obj_cb
End Property
Private Sub mobjcb_change()
Call Merkmal_auswahl.Merkmal_auswahl(mobjcb)
End Sub
Das funktioniert soweit auch nur finde ich, dass es nicht sauber programmiert ist, da ich es nicht schaffe das ganze mit zb
For each box in obj_cb
zu lösen sonder den großen Umweg über
Modul

Sub Merkmal_auswahl(c_box As Object)
Dim cb As Control
For Each cb In frm_start.Controls
If VBA.Left(cb.name, 5) = "cb_mz"  And c_box.Value = True Then
cb.Value = False
End If
Next
End Sub

gehen muss
kennt jemand dafür eine Lösung?
lg
PePe

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: each für Klassen
17.05.2011 10:42:50
Rudi
Hallo,
das sollte so gehen:
For Each box in obj_cb
box.prpSet_cb=false
Next Box

Gruß
Rudi
AW: each für Klassen
17.05.2011 19:42:48
Nepumuk
Hallo,
auf das Event-Objekt einer Klasse kannst du nur zugreifen wenn entweder das Objekt öffentlich ist.
Public WithEvents mobjcb As MSForms.CheckBox

Jetzt kannst du mit
For Each box In obj_cb
    box.mobjcb.Value = False
Next

auf das Objekt zugreifen. box muss dabei als Variant deklariert sein.
Oder du hast eine öffentliche Get-Prozedur in der Klasse. Dann so:
Public Property Get prpSet_cb() As MSForms.CheckBox
    Set prpSet_cb = mobjcb
End Property

Und dann der Zugriff auf das Objekt:
For Each box In obj_cb
    box.prpSet_cb.Value = False
Next

Warum machst du eigentlich keine Abfrage in der Klasse ob der Value der Checkbox (mobjcb) True ist? Damit wüdest du dir sparen dass die Klasse bei jeder Änderung, auch durch die Prozedur "Merkmal_auswahl" die Prozedur "Merkmal_auswahl" aufruft (Rekursion). Außerdem musst du nicht bei jeder Box abfragen welchen Wert die ursprünglich geänderte Box hat.
Gruß
Nepumuk
Anzeige
AW: each für Klassen
20.05.2011 08:51:27
Alsatian
Danke für die Hilfe funktioniert.
@Nepumuk
Gute Idee spart zwar nicht viel Zeit ist aber deutlich sauberer.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige