Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
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

Checkbox im Klassenmodul

Checkbox im Klassenmodul
26.11.2017 13:16:46
Jürgen
Hallo Profis,
ich bin Autodidakt und komme mit der Programmierung in VBA schon ganz passabel klar. Jetzt versuche ich gerade, mich in die Klassenprogrammierung einzuarbeiten, ist ein schwieriges Feld. Ich habe dafür ein Beispiel von HaJo zu Hilfe genommen und entsprechend angepasst. Leider verstehe ich nicht alles. Folgende Problematik:
Es gibt mehrere Formulare mit CheckBoxen und OptionButtons. Da eine Parameterübergabe an ein Klassenmodul nicht möglich ist, habe ich den Formularnamen in die Tag-Eigenschaft der Steuerelemente geschrieben. Damit wollte ich auf das Formular verweisen, klappt aber nicht wie gewollt.
Hier ein Beispiel:
Userform "FrmChkBox1" (mit Checkbox 1 bis 10):
Private ChkBoxes() As New clsChkBox
Private Sub UserForm_Initialize()
Dim Ctr As Control
Dim intA As Integer
For Each Ctr In Me.Controls
If TypeName(Ctr) = "CheckBox" Then
ReDim Preserve ChkBoxes(0 To intA)
Set ChkBoxes(intA).myChkBox = Ctr
intA = intA + 1
End If
Next Ctr
End Sub
Klassenmodul "clsChkBox":
'diese Prozedur funktioniert, nicht aktivierte Checkboxen werden False
Public WithEvents myChkBox As MSForms.CheckBox
Private Sub myChkBox_Change()
Dim Ctr As Control
Dim objFrm As Object
Set objFrm = FrmChkBox1
If myChkBox = True Then
With myChkBox
For Each Ctr In objFrm.Controls
If TypeName(Ctr) = TypeName(myChkBox) And Ctr.Name  myChkBox.Name Then
Ctr = False
End If
Next
End With
End If
Set objFrm = Nothing
End Sub
'bei dieser Prozedur bleiben nicht aktivierte Checkboxen True
Private Sub myChkBox_Change()
Dim Ctr As Control
Dim objFrm As Object
Dim strFrm As String
If myChkBox = True Then
With myChkBox
strFrm = .Tag   ' myChkBox.Name Then
Ctr = False
End If
Next
End With
End If
Set objFrm = Nothing
End Sub
Sicherlich liegt der Fehler im Verweis auf das Objekt Userform, das Formular ist im Lokalfenster aber als Objekt sichtbar (bei Einzelschritt). Wer kann mir weiterhelfen und erklären, was ich falsch mache.
Vielen Dank schon mal im Voraus.
Mfg Jürgen

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Checkbox im Klassenmodul
26.11.2017 13:22:35
Sepp
Hallo Jürgen,
nutze die .Parent Eigenschaft.
Private Sub myChkBox_Change()
Dim Ctr As Control

If myChkBox = True Then
  With myChkBox
    For Each Ctr In Ctr.Parent.Controls
      If TypeName(Ctr) = TypeName(myChkBox) And Ctr.Name <> myChkBox.Name Then
        Ctr = False
      End If
    Next
  End With
End If
End Sub

Gruß Sepp

Anzeige
AW: Checkbox im Klassenmodul
26.11.2017 13:34:39
Jürgen
Hallo Sepp,
das funktioniert leider nicht, es kommt die Fehlermeldung Laufzeitfehler 91 "Objektvariable oder With-Blockvariable nicht festgelegt".
Mfg Jürgen
AW: Checkbox im Klassenmodul
26.11.2017 13:42:02
Sepp
Hallo Jürgen,
sorry, muss natürlich so lauten.
Private Sub myChkBox_Change()
Dim Ctr As Control

If myChkBox = True Then
  With myChkBox
    For Each Ctr In .Parent.Controls
      If TypeName(Ctr) = TypeName(myChkBox) And Ctr.Name <> .Name Then
        Ctr = False
      End If
    Next
  End With
End If
End Sub

Gruß Sepp

Anzeige
AW: Checkbox im Klassenmodul
26.11.2017 13:53:37
Jürgen
Hallo Sepp,
super, funktioniert, vielen Dank,
Dann habe ich gleich noch eine Frage.
Ich sammele die einzelnen Checkboxen des Formulars in einem Array und übergebe sie an das Klassenmodul. Ich habe gelesen, dass man die Variable mit Userform_Terminate wieder freigeben soll (Klasse zerstören hat das jemand genannt). Ein Datenfeld kann man aber nicht auf Nothing setzen. Hast du eine Idee?
Mfg Jürgen
AW: Checkbox im Klassenmodul
26.11.2017 14:02:26
Sepp
Hallo Jürgen,
ein Datenfeld kannst du mit 'Erase deinDatenfeld' "vernichten" Objekte die du innerhalb des Klassenmoduls des UF erstellst, werden beim Beenden auf jeden Fall vernichtet/entladen.
Zum 'zerstören' eine eigenen Klasse siehe: http://www.online-excel.de/excel/singsel_vba.php?f=51
Gruß Sepp

Anzeige
AW: Checkbox im Klassenmodul
26.11.2017 14:25:45
Jürgen
Hallo Sepp,
solange das Formular geöffnet ist, brauche ich die Objekte des Klassenmoduls, wenn sie entladen werden beim Schliessen des Formulars, kann ich mir eine separate Prozedur ersparen. Die Beschreibung von Online-
Excel habe ich bereits gelesen, leider verstehe ich noch nicht alles, aber ich werde weiter üben.
Nochmals vielen Dank für die Hilfe.
Mfg Jürgen

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige