Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

ListBox Zweizeilig, Sichtbarkeit mit Abhängigkeit aus Tabelle
#1
Hi zusammen

Ich habe in meinem Formular ein nächstes Problem.
Auf dem Formular 2 habe ich ein "Antragsformular" bei welchem durch anwählen von Checkboxen vers. Elemente bestellt werden können. Hier im Beispiel Wert 1 bis Wert 7.

Daneben befindet sich eine Listbox, hier sollen durch anklicken von Wert_1 bis Wert 7 bestimmte Checkboxen zum vorschein kommen.
Dieser Part funktioniert soweit dank der Hilfe hier im Forum. :)

Mein nächstes Problem ist das ich leider den Code noch nicht richtig verstanden habe und ihn daher nicht schaffe selber anzupassen  Blush (Google konnte mir leider auch nicht helfen :20: )

Ich hätte gerne wie in der Beispieldatei die Werte in der Spalte B auch als neue Spalte in der Listbox. 
Kann mir da wieder jemand behilflich sein? :)

Hier der Code:
Code:
Private Sub Weiter_Click()
    Dim i As Long, j As Long
    Dim varMatrix As Variant
  
    varMatrix = Worksheets("Matrix").Range("A2:H19").Value
    With Me
      .ListBox1.Clear
      For i = 1 To 9
        For j = 1 To 7
          If Len(varMatrix(i, j + 1)) Then
            If Me.Controls(j) Then
           
              .ListBox1.AddItem varMatrix(i, 1)

             
              Exit For
            End If
          End If
        Next j
      Next i
      .ListBox1.ListStyle = fmListStyleOption
      .ListBox1.MultiSelect = fmMultiSelectMulti
    End With
  
End Sub

Vielen Dank


Angehängte Dateien
.xlsm   Userform Formulare Checkboxen.xlsm (Größe: 40,24 KB / Downloads: 6)
Top
#2
Hallo,

teste mal den unten stehenden Code.
Es sind zwei neue Codezeilen hinzugekommen, die im Code gekennzeichnet sind.

Code:
Private Sub Weiter_Click()
    Dim i As Long, j As Long
    Dim varMatrix As Variant
   
    varMatrix = Worksheets("Matrix").Range("A2:H19").Value
    With Me
      .ListBox1.Clear
      .ListBox1.ColumnCount = 2     'neue Codezeile
      For i = 1 To 9
        For j = 1 To 7
          If Len(varMatrix(i, j + 1)) Then
            If Me.Controls(j) Then
                .ListBox1.AddItem varMatrix(i, 1)
                .ListBox1.List(ListBox1.ListCount - 1, 1) = varMatrix(i, 2) 'neue Codezeile
              Exit For
            End If
          End If
        Next j
      Next i
      .ListBox1.ListStyle = fmListStyleOption
      .ListBox1.MultiSelect = fmMultiSelectMulti
    End With
   
End Sub
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Zeichner
Top
#3
Hallo,

habe gerade gesehen, dass Du nur Werte bis 6 hast.

So müsste es klappen:

Code:
Private Sub Weiter_Click()
    Dim i As Long, j As Long
    Dim varMatrix As Variant
   
    varMatrix = Worksheets("Matrix").Range("A2:H19").Value
    With Me
      .ListBox1.Clear
      .ListBox1.ColumnCount = 2     'neue Codezeile
      For i = 1 To 9
        For j = 1 To 6
          If Len(varMatrix(i, j + 2)) Then
            If Me.Controls(j) Then
                .ListBox1.AddItem varMatrix(i, 1)
                .ListBox1.List(ListBox1.ListCount - 1, 1) = varMatrix(i, 2) 'neue Codezeile
              Exit For
            End If
          End If
        Next j
      Next i
      .ListBox1.ListStyle = fmListStyleOption
      .ListBox1.MultiSelect = fmMultiSelectMulti
    End With
   
End Sub
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Zeichner
Top
#4
(19.03.2020, 22:40)atilla schrieb: Hallo,

habe gerade gesehen, dass Du nur Werte bis 6 hast.

So müsste es klappen:

Code:
Private Sub Weiter_Click()
    Dim i As Long, j As Long
    Dim varMatrix As Variant
  
    varMatrix = Worksheets("Matrix").Range("A2:H19").Value
    With Me
      .ListBox1.Clear
      .ListBox1.ColumnCount = 2     'neue Codezeile
      For i = 1 To 9
        For j = 1 To 6
          If Len(varMatrix(i, j + 2)) Then
            If Me.Controls(j) Then
                .ListBox1.AddItem varMatrix(i, 1)
                .ListBox1.List(ListBox1.ListCount - 1, 1) = varMatrix(i, 2) 'neue Codezeile
              Exit For
            End If
          End If
        Next j
      Next i
      .ListBox1.ListStyle = fmListStyleOption
      .ListBox1.MultiSelect = fmMultiSelectMulti
    End With
  
End Sub

Hi Atilla
Vielen vielen Dank  Thumbsupsmileyanim
Perfekte Lösung :)
Top
#5
(19.03.2020, 22:40)atilla schrieb: Hallo,

habe gerade gesehen, dass Du nur Werte bis 6 hast.

So müsste es klappen:

Code:
Private Sub Weiter_Click()
    Dim i As Long, j As Long
    Dim varMatrix As Variant
  
    varMatrix = Worksheets("Matrix").Range("A2:H19").Value
    With Me
      .ListBox1.Clear
      .ListBox1.ColumnCount = 2     'neue Codezeile
      For i = 1 To 9
        For j = 1 To 6
          If Len(varMatrix(i, j + 2)) Then
            If Me.Controls(j) Then
                .ListBox1.AddItem varMatrix(i, 1)
                .ListBox1.List(ListBox1.ListCount - 1, 1) = varMatrix(i, 2) 'neue Codezeile
              Exit For
            End If
          End If
        Next j
      Next i
      .ListBox1.ListStyle = fmListStyleOption
      .ListBox1.MultiSelect = fmMultiSelectMulti
    End With
  
End Sub

Hi noch einmal  Blush
Was müsste ich den jetzt noch ändern wenn ich die Checkboxen nicht durchnummeriert habe sondern z.b. Checkbox_Wert1, Checkbox_Name usw.? Da ich schon relativ viel Code in diesem Formular habe, wäre ich froh wenn ich die namen der Checkboxen für die Übersichtlichkeit so lassen könnte..
Ausserdem habe ich an erster Stelle eine Combobox mit 3 auswahlmöglichkeiten, und bei den Auswaqhlmöglichkeiten nr 2+3 soll das gleiche passieren wie wenn ich die anderen Checkboxen anwähle, bei der Auswahl nr 1 sollte nichts passieren..

Sorry für die Vielen Fragen, aber leider komme ich nur sehr selten zum Programmieren und bin daher nicht sehr routiniert und verstehe außerdem auch nicht alle Teile des Codes..
Top
#6
Hallöchen,

Du könntest Dir z.B. eine Liste mit den Namen der Checkboxen erstellen und diese dann abarbeiten ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
(20.03.2020, 17:14)schauan schrieb: Hallöchen,

Du könntest Dir z.B. eine Liste mit den Namen der Checkboxen erstellen und diese dann abarbeiten ...
Hi schauan

Danke für deine Antwort

Habe es Probiert aber leider hakt es momentan immer noch....

Mit dem Abschnitt "Werte_Y = Worksheets("Matrix").Cells(1, Y)" habe ich die Liste erstellt, leider weis ich aber nicht genau wie implementieren :(

Außerdem habe ich ein weiteres Problem, es gibt in meinem Formular neu eine Combobox welche ich gerne mit einbeziehen würde, mit den Inhalten "Wert_1, Wert_2, Wert_3"
Wie gesagt, die Beispiel-Datei ist nur ein Dummie, die richtigen werte sind normaler Text..

Im Anhang mein aktueller Stand...


Angehängte Dateien
.xlsm   Userform Formulare Checkboxen Dummi.xlsm (Größe: 54,64 KB / Downloads: 5)
Top
#8
Hallöchen,

im Prinzip so:

Code:
Private Sub UserForm_Click()
Dim iCnt%, strCB$
For iCnt = 3 To 11
strCB = Cells(1, iCnt)
Debug.Print Me.Controls.Item(strCB).Name
Next
End Sub

Der Code gibt die Namen der CB's im Debug-Fenster aus, wenn DU auf die Grundfläche des UF klickst.
Wert_* gibt es aber nicht Sad

Relevant ist der Teil:
Me.Controls.Item(strCB)

Da könntest Du in einer weiteren Schleife aus deinen Zellen die entsprechenden Einträge holen oder andere Steuerelemente schalten oder was auch immer damit anzustellen ist ... Im Prinzip z.B.

For iCnt = 3 To 11
strCB = Cells(1, iCnt)
For kCnt = 2 To 9
If Cells(kcnt,icnt) = "X" And Me.Controls.Item(strCB).Value = True Then
'Mach was mit Cells(kcnt, 1) und Cells(kcnt, 2)
End If
Next
Next
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste