Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Ereignis von Laufzeit-Checkbox

Betrifft: Ereignis von Laufzeit-Checkbox von: Adi
Geschrieben am: 08.04.2008 22:37:30

Hallo liebes Forum,

mit folgendem Code


Private Sub UserForm_Initialize()
        
    AnzMitarbeiter = UBound(MitarbeiterNameArray)
            
    Me.Height = Me.Height + 15 * AnzMitarbeiter + 20 + 10
    Me.AbbruchCommandButton.Top = Me.AbbruchCommandButton.Top + 15 * (AnzMitarbeiter) + 20 + 10
    Me.OKCommandButton.Top = Me.OKCommandButton.Top + 15 * (AnzMitarbeiter) + 20 + 10
    
    For CheckBoxZähler = 1 To AnzMitarbeiter
        CheckBoxName = Bereinigt(MitarbeiterNameArray(CheckBoxZähler)) & "CheckBox"
        Set CheckBox_i = Controls.Add("Forms.CheckBox.1", CheckBoxName)
        CheckBox_i.Left = 6
        CheckBox_i.Top = 15 * (CheckBoxZähler) '18
        CheckBox_i.Width = 99
        CheckBox_i.Height = 20
        CheckBox_i.Caption = MitarbeiterNameArray(CheckBoxZähler)
        CheckBox_i.BackStyle = fmBackStyleTransparent
    Next CheckBoxZähler
        
        'alleCheckBox
        CheckBoxName = "alleCheckBox"
        Set CheckBox_i = Controls.Add("Forms.CheckBox.1", CheckBoxName)
        CheckBox_i.Left = 6
        CheckBox_i.Top = 15 * (CheckBoxZähler) + 8
        CheckBox_i.Width = 99
        CheckBox_i.Height = 20
        CheckBox_i.Caption = "alle Mitarbeiter"
        CheckBox_i.BackStyle = fmBackStyleTransparent
End Sub


passe ich eine Userform zur Laufzeit an, so dass im Dialogfenster für jeder im Tabellenblatt gefundene Mitarbeiter (MitarbeiterNameArray) ein Kontrollkästchen und zusätzlich eine Kontrollkästchen "alle Mitarbeiter" exisitiert.

Nun will ich das Ereignis des Anhakens/ Haken-Entfernens dieses letzten Kontrollkästchens abfangen.
Ich dachte das mit

Private Sub alleCheckBox_Click()
....
End Sub


zu erreichen, obwohl das Kontrollkästchen erst während der Laufzeit erzeugt und benannt wird.
Aber nichts passiert.

Könnt Ihr mir helfen?

Danke im Voraus
Adi

  

Betrifft: AW: Ereignis von Laufzeit-Checkbox von: Herbert
Geschrieben am: 08.04.2008 22:45:47

Hi,



endlich mal ein Profi!



Du brauchst ein Klassenmodul, Beispiele in der Recherche.



mfg Laie Herbert


  

Betrifft: AW: Ereignis von Laufzeit-Checkbox von: Harald Kapp
Geschrieben am: 09.04.2008 06:54:56

Es geht auch ohne Klassenmodul, aber recht unelegant. Man kann den nötigen Code zur Laufzeit erzeugen. Hier mal ein Ausschnitt aus einem Code, den ich vor lannger Zeit gestrickt habe (fragt mich nicht mehr nach Details dazu :-):

...
' hier werden zwei Knöpfe und die Checkbox angelegt:
' Buttons für O.K. oder Abbruch anlegen


Set OK_Button = Kurse_aktualisieren.Designer.Controls.Add("Forms.CommandButton.1")
   With OK_Button
      .Left = 124
      .Top = 30 + 20 * (Anzahl_Aktien + 2)
      .Width = 48
      .Height = 18
      .Caption = "OK"
      .Cancel = False
      .Default = True
      .Name = "Command_OK"
   End With
   Set Abbruch_Button = Kurse_aktualisieren.Designer.Controls.Add("Forms.CommandButton.1")
   With Abbruch_Button
      .Left = 208
      .Top = 30 + 20 * (Anzahl_Aktien + 2)
      .Width = 48
      .Height = 18
      .Caption = "Abbruch"
      .Cancel = True
      .Default = False
      .Name = "Command_Abbruch"
   End With
   Set Kopieren_CheckBox = Kurse_aktualisieren.Designer.Controls.Add("Forms.CheckBox.1")
   With Kopieren_CheckBox
      .Left = 240
      .Top = 6
      .Height = 15
      .Caption = "Kopieren"
      .Value = False
      .Name = "Kopieren_CheckBox"
   End With
...

' hier wird der dazu gehörige Code zur Laufzeit erzeugt:
' Definition des Code Modules für das Formular
   With Kurse_aktualisieren.CodeModule
      i = .CountOfLines
      If i = 2 Then
         .InsertLines i, "": i = i + 1
      Else
         i = 1
      End If
' Definition der Prozedur für den OK Button
      .InsertLines i, "Private Sub Command_OK_Click()": i = i + 1
      .InsertLines i, "Datum_Pub = Datum_neu": i = i + 1
      .InsertLines i, "Abbruch = False": i = i + 1
      .InsertLines i, "LeereEingabe = False": i = i + 1
      .InsertLines i, "Kopieren_Kurse_Kommentar = Kopieren_Kurse_Wert.Value": i = i + 1
      For Index = 1 To Anzahl_Aktien
         .InsertLines i, "If Feldwert_" + CStr(Index) + ".Value <> """" Then": i = i + 1 ' """"  _
= "", da sonst das Ende des Strings erkannt würde
         .InsertLines i, "   Kurs_Pub(" + CStr(Index) + ") = Feldwert_" + CStr(Index) + ".Value" _
: i = i + 1
         .InsertLines i, "Else": i = i + 1
         .InsertLines i, "   LeereEingabe = True": i = i + 1
         .InsertLines i, "End If": i = i + 1
      Next Index
      .InsertLines i, "Unload Me": i = i + 1
      .InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für den Abbruch Button
      .InsertLines i, "Private Sub Command_Abbruch_Click()": i = i + 1
      .InsertLines i, "Abbruch = True": i = i + 1
      .InsertLines i, "Unload Me": i = i + 1
      .InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für das Schließen Feld. Hier Schließen = Abbruch
      .InsertLines i, "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)" _
: i = i + 1
      .InsertLines i, "If CloseMode = vbFormControlMenu Then Abbruch = True": i = i + 1
      .InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für die Kopieren Checkbox
      Kopieren_Kurs = False
      .InsertLines i, "Private Sub Kopieren_CheckBox_Click()": i = i + 1
      .InsertLines i, "If Kopieren_CheckBox.Value = False Then": i = i + 1
      .InsertLines i, "Kopieren_Kurse_Label.Visible = False": i = i + 1
      .InsertLines i, "Kopieren_Kurse_Wert.Visible = False": i = i + 1
      For Index = 1 To Anzahl_Aktien
         .InsertLines i, "Feldwert_" + CStr(Index) + ".Value = """"": i = i + 1
      Next Index
      .InsertLines i, "Else": i = i + 1
      .InsertLines i, "Kopieren_Kurs = True": i = i + 1
      .InsertLines i, "Kopieren_Kurse_Label.Visible = True": i = i + 1
      .InsertLines i, "Kopieren_Kurse_Wert.Visible = True": i = i + 1
      For Index = 1 To Anzahl_Aktien
         .InsertLines i, "Feldwert_" + CStr(Index) + ".Value = Letzter_Kurs(" + CStr(Index) + ") _
": i = i + 1
      Next Index
      .InsertLines i, "End If": i = i + 1
      .InsertLines i, "End Sub": i = i + 1
      
   End With
...



Unelegant, aber läuft seit Jahren.

Gruß Harald


  

Betrifft: AW: Ereignis von Laufzeit-Checkbox von: Adi
Geschrieben am: 09.04.2008 08:52:01

Danke Harald, Danke Herbert.

ich muss zugeben, vor Klassenmodulen habe ich "Manschetten".

Meine Lösung:
Da die UserForm schon von Beginn an vorhanden ist und während der Laufzeit nur erweitert wird, habe ich nun auch die "problematische" alleCheckBox von Anfang an integriert (alle Mitarbeiter-CheckBoxen werden hingegen erst zur Laufzeit erzeugt).
So kann ich mittels alleCheckBox_Click wie gewohnt das Ereignis abfangen.

Nichtsdestotrotz ist die Lösung mittels Klassenmodul wohl die 'einzig wahre' Methode. Nur leider hab ich auf die Schnelle in der Recherche kein passendes Beispiele finden können. Mein Fehler!


 

Beiträge aus den Excel-Beispielen zum Thema "Ereignis von Laufzeit-Checkbox"