UF mit Checkboxen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: UF mit Checkboxen
von: Petra
Geschrieben am: 25.03.2008 13:24:34

Servus alle Excelianer(innen)
ich habe eine UF mit 20 Checkboxen.
Für jede Checkbox habe ich immer den gleichen Code mit jeweils geringfügigen Änderungen (fett)


Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
    Sheets("Liste").Cells(2, 1) = 1
Else
    Sheets("Liste").Cells(2, 1) = ""
End If
End Sub



Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
    Sheets("Liste").Cells(3, 1) = 2
Else
    Sheets("Liste").Cells(3, 1) = ""
End If
End Sub


usw. wie bereits gesagt, für 20 Checkboxen,
meine Frage: geht das nicht kürzer zu programmieren??
Liebe Grüße Petra

Bild

Betrifft: AW: UF mit Checkboxen
von: Rudi Maintaire
Geschrieben am: 25.03.2008 13:41:16
Hallo,
das geht über eine eigene Klasse.
1. ein Klassenmodul einfügen. Name: clsCheckBox
Code:


Public WithEvents objCBX As MSForms.CheckBox
Private Sub objCBX_click()
   With Sheets("Liste").Cells(objCBX.Tag+1, 1)
      If objCBX = True Then
         .Value = objCBX.Tag
       Else
         .Value = ""
       End If
    End With
End Sub


2. In ein Modul:


Public oclsCheckBox(1 To 20) As New clsCheckbox


3. Im Code der UF:


Private Sub UserForm_Initialize()
Dim i As Integer
   For i = 1 To 20
      Set oclsCheckBox(i).objCBX = Me.Controls("CheckBox" & i)
      oclsCheckBox(i).objCBX.Tag = i
   Next
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Bild

Betrifft: AW: UF mit Checkboxen
von: Petra
Geschrieben am: 25.03.2008 13:47:36
Hallo Rudi
vielen Dank für Deinen grandiosen Tipp, auch viele Grüße an Deine Kühe
Einen schönen Tag noch, Petra

Bild

Betrifft: AW: UF mit Checkboxen
von: Tino
Geschrieben am: 25.03.2008 13:48:37
Hallo,
mir fällt nur diese Variante ein


Private Sub CheckBox1_Click()
Schreiben CheckBox1, 1
End Sub
Private Sub CheckBox2_Click()
Schreiben CheckBox2, 2
End Sub
Private Sub CheckBox3_Click()
Schreiben CheckBox3, 3
End Sub
Sub Schreiben(ZuSt As Boolean, Zelle As Integer)
With Sheets("Liste")
    If ZuSt = True Then
        .Cells(1 + Zelle, 1) = Zelle
     Else
        .Cells(1 + Zelle, 1) = ""
    End If
End With
End Sub


Gruß
Tino

Bild

Betrifft: AW: UF mit Checkboxen
von: Petra
Geschrieben am: 25.03.2008 13:54:30
Hallo Tino
auch Dir vielen Dank für Deine Hilfe!
Liebe Grüße von Petra

Bild

Betrifft: AW: UF mit Checkboxen
von: Daniel
Geschrieben am: 25.03.2008 13:51:42
Hi
alternativ zur Klasse kannst du auch anstelle der 20 Checkboxen eine Listbox mit 20 Elementen verwenden.
(wenns vom Design her möglich ist)
In den Eigenschaften stellst du dann "MultiSelect" auf TRUE und "ListSyle" auf "fmListStyleOption"
Über Listbox1.Selected(x) kannst du dann abfragen, ob ein bestimmtes Element aktiviert ist oder nicht.
Die Programmierung könnte dann so aussehen


Private Sub Listbox1_Change()
dim i as long
for i = 0 to Listbox1.ListCount-1
     if listbox1.selectet(i) = true then
          Sheets("Liste").cells(i+2,1).value = i + 1
     else
           Sheets("Liste").cells(i+2).value = ""
    end if
next
end sub


Gruß, Daniel
ps. beachte: die Indexzählung der Listboxelemente beginnt bei 0

Bild

Betrifft: AW: UF mit Checkboxen
von: Petra
Geschrieben am: 25.03.2008 13:55:38
Hallo Daniel
auch Deine Variante hat was. Auch Dir vielen Dank und liebe Grüße
Petra

Bild

Betrifft: AW: UF mit Checkboxen
von: Renee
Geschrieben am: 25.03.2008 14:00:50
Hi Petra,
Und noch eine Variante, mit Klassenmodul, aber ohne Tags:


'-----------------------------------------------
' Dieser Code gehört in die USERFORM
'-----------------------------------------------
Option Explicit
Dim objCBX(1 To 20) As New clickCBX
Private Sub UserForm_Initialize()
   Dim objCtl As Control
   Dim lx As Long
   For Each objCtl In Me.Controls
      If TypeName(objCtl) = "CheckBox" Then
         objCtl.Value = Not (Sheets("Liste").Cells(lx + 1, 1) = "")
         lx = lx + 1
         Set objCBX(lx).thisCheckBox = objCtl
      End If
   Next
End Sub
'--------------------------------------------------------------
' Dieser Code gehört in ein Klassenmodul mit dem Namen clickCBX
'--------------------------------------------------------------
Option Explicit
Public WithEvents thisCheckBox As MSForms.CheckBox
Private Sub thisCheckBox_Click()
    Sheets("Liste").Cells(Val(Mid(thisCheckBox.Name, 9, 2)) + 1, 1) = _
             IIf(thisCheckBox, Val(Mid(thisCheckBox.Name, 9, 2)), "")
End Sub


GreetZ Renée

Bild

Betrifft: AW: UF mit Checkboxen
von: Petra
Geschrieben am: 25.03.2008 14:21:27
Grüß Dich Renée
auch Dir vielen Dank für Deinen Tipp und noch einen schönen Tag
Petra

 Bild

Beiträge aus den Excel-Beispielen zum Thema "2 Spalten vergleichen per VBA"