AW: Checkboxen als Kriterienfilter
25.05.2016 13:27:42
Chris
Hi Karin,
ich hab mich selbst noch etwas daran versucht.
Der User muss die Möglichkeit haben auch zum Beispiel eine Strecke mit 13m einzugeben und trotzdem das passende Produkt zu erhalten.
Außerdem hab ich versucht die Selektion der Produktart mit unterzubringen.
Hier der Code:
With Worksheets("Bestandsliste") 'Angabe des Worksheets mit welchem gearbeitet wird
' Zeilen in Spalte A durchlaufen letzte belegte Zelle
For lngZeile = 2 To IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
' Schleife über alle Steuerelemente des UF,
' geprüft werden sollen die CheckBoxen der relevanten spalte auf Eintrag X
' nur die CheckBoxen haben als Tag die Spaltennummer
For Each ctrElement In Me.Controls
' Wenn kein Tag für Steuerelement vergeben --> weiteren Code nicht ausführen
If ctrElement.Tag "" Then
' Steuerelement ist aktiviert
If ctrElement Then
' falls in der Spalte, die im Tag steht, kein "X" enthalten, dann
If .Cells(lngZeile, CInt(ctrElement.Tag)) "X" Then
' Variable auf True setzen und anschließend Schleife verlassen;
' das verkürzt den Durchlauf da bei mindestens
' 1 Nichtübereinstimmung der Eintrag nicht in die ListBox
' übernommen werden darf
blnKeinEintrag = True
Exit For
End If
End If
End If
Next ctrElement
' komplette Übereinstimmung aller CheckBoxen und X in relevanter Spalte
If blnKeinEintrag = False Then
' Prüfung für die OptionButton ob Übereinstimmung mit Inhalt TBM
' falls Optionbutton BTN4K aktiv dann
If BTN4K Then
' 1 Eingang, 1 Ausgang --> Extender
If CInt(TBQ) = "1" And CInt(TBD) = "1" And .Cells(IngZeile, 4).Value And . _
Cells(IngZeile, 27).Value = "X" Then
'Wenn Reichweite kleiner / gleich angegebener Übertragungsstrecke
If .Cells(IngZeile, 30).Value >= CInt(TBM) Then
binReich = True
End If
End If
' 1 Eingang, 2+ Ausgänge --> Splitter
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
' 2+ Eingänge, 1 Ausgang --> Switcher
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
' 2+ Eingänge, 2+ Ausgänge --> Matrix / NHD
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
' andernfalls
Else
' 1 Eingang, 1 Ausgang --> Extender
If CInt(TBQ) = "1" And CInt(TBD) = "1" And .Cells(IngZeile, 4).Value And . _
Cells(IngZeile, 28).Value = "X" Then
'Wenn Reichweite kleiner / gleich angegebener Übertragungsstrecke
If .Cells(IngZeile, 30).Value >= CInt(TBM) Then
binReich = True
End If
End If
' 1 Eingang, 2+ Ausgänge --> Splitter
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
' 2+ Eingänge, 1 Ausgang --> Switcher
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
' 2+ Eingänge, 2+ Ausgänge --> Matrix / NHD
If CInt(TBQ) = CInt(TBM) Then
binReich = True
End If
End If
If blnReich Then
' in 1. Spalte Produkt eintragen
lblProdukte.AddItem .Cells(lngZeile, 1)
' in Spalte 2 Reichweite1 eintragen
lblProdukte.List(lblProdukte.ListCount - 1, 1) = .Cells(lngZeile, 28)
' in Spalte 3 Recihweite2 eintragen
lblProdukte.List(lblProdukte.ListCount - 1, 2) = .Cells(lngZeile, 29)
' in 4. Spalte Zeilennummer eintragen
lblProdukte.List(lblProdukte.ListCount - 1, 3) = lngZeile
End If
End If
' Zurücksetzen aller variablen für den nächsten Schleifendurchlauf
blnKeinEintrag = False
blnReich = False
blnEingang = False
blnAusgang = False
Next lngZeile
End With
End Sub
Hier bekomm ich jetzt aber immer "Next lngZeile" als Fehler markiert mit der Begründung "Next ohne For".
Wo hab ich mich verhaspelt? :)
Viele Grüße
Chris