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

Checkboxen als Kriterienfilter

Checkboxen als Kriterienfilter
23.05.2016 17:20:18
Chris
Hallo zusammen,
ich bin gerade dabei meine etwas älteren VBA Kenntnisse wieder aus der Kiste zu kramen.
Ich habe ein Excel-File vor mir, in welchem in jeder Zeile (Spalte A) der Name eines Produkts steht.
In den folgenden Spalten kommen jeweils verschiedene Eigenschaften der Produkte (z.B. USB, Audio, Ethernet,...)
Trifft eine oder mehrere Eigenschaften auf das Produkt zu, steht in der entsprechenden Zelle ein "X".
Ich habe bereits eine Userform erstellt und verschiedene Kriterien darin verankert.
Diese schaff ich auch soweit ganz gut (auch wenn mit etwas viel Code) abzufragen.
Für die oben genannten Kriterien habe ich nun Checkboxen erstellt.
Hier fehlt mir jetzt aber jeglicher Ansatz wie ich es schaffe gleich mehrere Kriterien abzufragen, zu vergleichen und dann nur die Zeilen auszugeben, welche wirklich alle angehakten Kriterien erfüllen.
Im Prinzip ist es eine Art multiple, flexible IF-Schleife?!
Oder doch eine Case-Schleife?
Ich bräuchte hier dringend einen Denkanstoß...
Danke euch schon mal im Voraus!
Viele Grüße
Chris

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 08:23:28
Beverly
Hi Chris,
lade doch mal eine Beispielmappe hoch.


AW: Checkboxen als Kriterienfilter
24.05.2016 08:47:27
Chris
Guten Morgen,
aber gern.
Siehe hier:
https://www.herber.de/bbs/user/105758.xlsx
Ist jetzt halt eine reine Rohversion ohne bisherigen Code.
Speziell die Spalten AD bis AM sollen durch die Checkboxen ausgewertet werden.
Viele Grüße
Chris

AW: Checkboxen als Kriterienfilter
24.05.2016 08:56:00
Beverly
Hi Chris,
naja, dein UserForm zu kennen wäre schon wichtig, nicht nur den Tabellenaufbau.


Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 09:47:59
Chris
Mir fällt grade noch ein.
Die Select Case Abfrage im Code habe ich nur mal als "Bastelei" mit eingefügt um zu schauen wie diese sich aufbaut / zusammensetzt.
Sie hat keinerlei Funktion.
Viele Grüße
Chris

AW: Checkboxen als Kriterienfilter
24.05.2016 09:49:04
Beverly
Du schreibst, du willst die Spalten AD:AM prüfen - das sind 10 Spalten; in deinerm UserForm gibt es jedoch nur 8 CheckBoxen unter Punkt 4.
Verstehe ich das richtig, in der TextBox TBProdukte sollen letztendlich alle Produkte aus Spalte A und die Reichweiten aus Spalte AB und AC aufgelistet werden, die in den relevanten Spalten ein X enthalten, falls die betreffende(n) CheckBox(en) aktiviert sind - für die somit alle ausgewählten Parameter zutreffen?
Weshalb eigentlich eine Text- und keine ListBox?


Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 09:56:17
Chris
Das Ganze Tool ist noch in einer sehr frühen Version.
Die Punkte werden noch etwas verändert und ggf. ergänzt.
Das Portfolio, welches hier durchforstet werden soll ist recht schwer zu durchschauen, weshalb ich immer noch dabei bin die Selektion anzupassen.
Sorry wenn das für Verwirrung sorgt.
Die Reichweiten dienen zur weiteren Einschränkung.
Ausgegeben wird nachher die Artikelnummer aus Spalte A und eine kurze Bezeichnung, die ich noch pflegen muss.
An eine Listbox habe ich ehrlich gesagt noch nicht gedacht...
Meine Kenntnisse sind noch aus der Berufschulzeit, die auch schon ein paar Tage her ist ;)
Für jegliche Verbesserungsvorschläge bin ich daher sehr offen :)
Viele Grüße
Chris

Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 11:09:19
Beverly
Hi Chris,
ich würde das ganze etwas anders aufziehen: schreibe in die Tag-Eigenschaft jeder CheckBox die Spaltennummer, die überprüft werden soll, laufe dann in einer äußeren Schleife über alle belegten Zeilen der Spalte A und dann in einer inneren Schleife über alle Steuerelemente, wobei du prüfst, ob die Tag-Eigenschaft belegt ist, ob es aktiviert ist (da ja nur die CheckBoxen einen Eintrag in der Tag-Eigenschaft haben) und falls beides ja, dann ob in der betreffenden Spalte in der laufenden Zeile ein "X" steht. Falls für alle aktivierten CheckBoxen in der relevanten Zelle ein X steht, dann die Produktbezeichnung als Spalte, die Länge aus Spalte AB und AC in die ListBox eintragen. Ich würde also auf die Unterscheidung der Meter verzichten und diese lieber in der ListBox anzeigen.
Private Sub CMDBTNShow_Click()
Dim lngZeile As Long
Dim intZaehlerBox As Integer
Dim intZaehlerX As Integer
Dim blnKeinEintrag As Boolean
Dim ctrElement As Control
lblProdukte.Clear
If CheckQDispHDMI.Value = False And CheckQDispDVI.Value = False And _
CheckQDispVGA.Value = False And CheckQDispCOMP.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Eingangsschnittstelle"
Exit Sub
End If
If CheckDispHDMI.Value = False And CheckDispHDBT.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Ausgangsschnittstelle"
Exit Sub
End If
If BTN4K.Value = False And BTN1080p.Value = False Then
MsgBox "Bitte wählen Sie 4K oder 1080p aus."
Exit Sub
End If
With Worksheets("Bestandsliste")
For lngZeile = 2 To IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
For Each ctrElement In Me.Controls
If ctrElement.Tag  "" Then
If ctrElement Then
If .Cells(lngZeile, CInt(ctrElement.Tag))  "X" Then
blnKeinEintrag = True
Exit For
End If
End If
End If
Next ctrElement
If blnKeinEintrag = False Then
lblProdukte.AddItem .Cells(lngZeile, 1)
lblProdukte.List(lblProdukte.ListCount - 1, 1) = .Cells(lngZeile, 28)
lblProdukte.List(lblProdukte.ListCount - 1, 2) = .Cells(lngZeile, 29)
lblProdukte.List(lblProdukte.ListCount - 1, 3) = lngZeile
End If
blnKeinEintrag = False
intZaehlerBox = 0
intZaehlerX = 0
Next lngZeile
End With
End Sub
In der Mappe habe ich mal die Spaltennummern für Punkt 4 in die Tags der CheckBoxen eintragen - die anderen sind mir unbekannt, musst du also selbst machen.
https://www.herber.de/bbs/user/105765.xlsm


Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 11:46:25
Chris
Wow! Vielen Dank für die schnelle Hilfe! :)
Allerdings ist die Reichweite und die Anzahl der Ein- und Ausgänge essentieller Bestandteil...
Ich versuch mich hieran mal noch und melde mich noch mal falls ich gegen eine Wand renne ;)
Vielen Dank noch mal!
Viele Grüße
Chris

AW: Checkboxen als Kriterienfilter
24.05.2016 13:47:12
Beverly
Hi Chris,
aus deiner hochgeladenen Mappe konnte ich nicht entnehmen, in welcher Spalte die Anzahl der Ein- und Ausgänge steht und wie sie Einfluss auf die Auswahl in der ListBox nehmen sollen. Und wie soll sich die Meteranzahl auf die Auswahl auswirken - welche Spalte soll denn dafür zum Vergleich herangezogen werden? Es gibt doch nirgendwo eine Auswahl, ob es sich beim Inhalt der TextBox TBM um die Spalte Reichweite1 oder Reichweite2 dabei handelt - die Zahl 70 gibt es z.B. in beiden Spalten.


Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 14:08:52
Chris
Hi Karin,
die Reichweiten stehen in der Beispieldatei ( https://www.herber.de/bbs/user/105760.xlsm ) in den Spalten AB und AC.
AB ist die Reichweite bei 1080p, AC ist die Reichweite bei 4K.
Die Anzahl der Eingänge ist die Spalte AN.
Die Ausgänge stehen dann in AO.
In meinem alten Code habe ich lediglich die Werte der Eingabe auf der Userform mit dem Eintrag in der Tabelle verglichen...
Der alte Code war extrem unübersichtlich da ich mir alles irgendwo zusammengereimt und dadurch teils extrem umständlich zusammengebastelt habe. :)
Gibt es eine Möglichkeit die in der Tabelle verankerten Werte mit den Angaben der Benutzer zu vergleichen und auch entsprechend zu filtern?
Viele Grüße
Chris

Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 15:09:16
Beverly
Hi Chris,
die CheckBoxen für die Eingänge und die Ausgänge an sich haben also keinerlei Einfluss auf die Auswahl und sind auch in keiner Spalte durch ein "X" gekennzeichnet? Im Code wird die relevante Spalte für die Reichweite und die in den TextBoxen TBQ und TBD eingetragene Anzahl der Ein- und Ausgänge berücksichtigt:
Private Sub CMDBTNShow_Click()
Dim lngZeile As Long
Dim intZaehlerBox As Integer
Dim intZaehlerX As Integer
Dim blnKeinEintrag As Boolean
Dim ctrElement As Control
Dim blnReich As Boolean
Dim blnEingang As Boolean
Dim blnAusgang As Boolean
lblProdukte.Clear
If CheckQDispHDMI.Value = False And CheckQDispDVI.Value = False And _
CheckQDispVGA.Value = False And CheckQDispCOMP.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Eingangsschnittstelle"
Exit Sub
End If
If CheckDispHDMI.Value = False And CheckDispHDBT.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Ausgangsschnittstelle"
Exit Sub
End If
If BTN4K.Value = False And BTN1080p.Value = False Then
MsgBox "Bitte wählen Sie 4K oder 1080p aus."
Exit Sub
End If
With Worksheets("Bestandsliste")
For lngZeile = 2 To IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
For Each ctrElement In Me.Controls
If ctrElement.Tag  "" Then
If ctrElement Then
If .Cells(lngZeile, CInt(ctrElement.Tag))  "X" Then
blnKeinEintrag = True
Exit For
End If
End If
End If
Next ctrElement
If blnKeinEintrag = False Then
If BTN4K Then
If .Cells(lngZeile, 28) = CLng(TBM) Then blnReich = True
Else
If .Cells(lngZeile, 29) = CLng(TBM) Then blnReich = True
End If
If Cells(lngZeile, 40) = CInt(TBQ) Then blnEingang = True
If Cells(lngZeile, 41) = CInt(TBD) Then blnAusgang = True
If blnReich And blnEingang And blnAusgang Then
lblProdukte.AddItem .Cells(lngZeile, 1)
lblProdukte.List(lblProdukte.ListCount - 1, 1) = .Cells(lngZeile, 28)
lblProdukte.List(lblProdukte.ListCount - 1, 2) = .Cells(lngZeile, 29)
lblProdukte.List(lblProdukte.ListCount - 1, 3) = lngZeile
End If
End If
blnKeinEintrag = False
intZaehlerBox = 0
intZaehlerX = 0
blnReich = False
blnEingang = False
blnAusgang = False
Next lngZeile
End With
End Sub



Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 15:23:32
Chris
Hi Karin,
hier ist die aktuellste Version (deinen letzten Beitrag noch nicht berücksichtigt).
https://www.herber.de/bbs/user/105769.xlsm
Die Anzahl der Eingänge, die Anzahl der Ausgänge + die dazugehörigen Checkboxen spielen bei der Auswahl eine Rolle.
Genauso wie die Übertragunsgdistanz und die Unterscheidung 1080p / 4K.
Ich hatte die letzte (alte) Datei nur als Beispiel hochgeladen.
In der jetzigen Version sind auch die Checkboxen mit den Spalten verknüpft.
Ich muss auch ehrlich sein und zugeben das ich nicht 100pro verstehe was in deinem Code wie abläuft.
Könntest Du mir die Schritte etwas kommentieren?
Den ersten Abschnitt bis inkl. "Next ctrElement" verstehe ich noch, danach wirds dunkel.
Vor allem was die Ausgabe und die Abfrage der Ein- und Ausgänge und der Distanz angeht.
Ich möchte aus dem Ganzen hier ja auch lernen :)
Danke Dir vielmals für die Hilfe und die Geduld!
Viele Grüße
Chris

Anzeige
AW: Checkboxen als Kriterienfilter
24.05.2016 20:31:53
Beverly
Hi Chris,
lösche die Tag-Eigenschaft für die OptionButton wieder - in der Schleife über alle Seuerelemente sollen nur die CheckBoxen berücksichtigt werden, denn für sie soll ja geprüft werden, ob die Spalte ein X enthält.
Die TextBox-Inhalte werden anders geprüft, denn es muss die Übereinstimmung mit dem Zellinhalt festgestellt werden. Und die OptionButton unterschieden einfach nur, ob der Inhalt mit Spalte 28 oder Spalte 29 verglichen werden muss. So müsste es eigentlich funktionieren:
Private Sub CMDBTNShow_Click()
Dim lngZeile As Long            ' Schleifenzähler für Zeile
Dim blnKeinEintrag As Boolean   ' Variable für komplette Übereinstimmung X in Zelle
Dim ctrElement As Control       ' Variable für Steuerelemente in Userform
Dim blnReich As Boolean         ' Variable für Übereinstimmung TextBox Reichweite mit Zelle
Dim blnEingang As Boolean       ' Variable für Übereinstimmung TextBox Eingänge mit Zelle
Dim blnAusgang As Boolean       ' Variable für Übereinstimmung Textbox Ausgänge mit Zelle
' ListBox leeren
lblProdukte.Clear
If CheckQDispHDMI.Value = False And CheckQDispDVI.Value = False And _
CheckQDispVGA.Value = False And CheckQDispCOMP.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Eingangsschnittstelle"
Exit Sub
End If
If CheckDispHDMI.Value = False And CheckDispHDBT.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Ausgangsschnittstelle"
Exit Sub
End If
If BTN4K.Value = False And BTN1080p.Value = False Then
MsgBox "Bitte wählen Sie 4K oder 1080p aus."
Exit Sub
End If
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 BTN4 aktiv dann
If BTN4K Then
' wenn Spalte 28 = Inhalt der TextBox TBM dann Reichweite Ok
If .Cells(lngZeile, 28) = CLng(TBM) Then blnReich = True
' andernfalls
Else
' wenn Spalte 28 = Inhalt der TextBox TBM dann Reichweite Ok
If .Cells(lngZeile, 29) = CLng(TBM) Then blnReich = True
End If
' Prüfung für TextBox TBQ ob Spalte 40 = Inhalt, falls ja Variable True
If Cells(lngZeile, 40) = CInt(TBQ) Then blnEingang = True
' Prüfung für TextBox TBD ob Spalte 41 = Inhalt, falls ja Variable True
If Cells(lngZeile, 41) = CInt(TBD) Then blnAusgang = True
' Inhalte aller 3 textBoxen stimmen überein dann ListBox füllen
If blnReich And blnEingang And blnAusgang 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

Was du letzendlich in die ListBox eintragen möchtest, musst du selbst entscheiden.


Anzeige
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

AW: Checkboxen als Kriterienfilter
25.05.2016 14:22:17
Beverly
Hi Chris,
mal generell: genau aus dem Grund, dass der Benutzer auch andere Reichweiten angeben darf und trotzdem die passenden Teile gefunden werden, finde ich es besser, den Vergleich mit der Reichweite wegzulassen (wie in meinem vorletzten Code) und stattdessen die vorhandenen Reichweiten in der ListBox auszugeben. Aber das musst du selbst entscheiden, wie du das löst.
In deinem Code fehlt vor der Zeile
                If blnReich Then
noch ein End If


AW: Checkboxen als Kriterienfilter
25.05.2016 17:03:26
Chris
Hi Karin,
irgendwo hab ich noch einen Bug (ok, ich glaub viele) im Code.
Private Sub CMDBTNShow_Click()
Dim lngZeile As Long            ' Schleifenzähler für Zeile
Dim blnKeinEintrag As Boolean   ' Variable für komplette Übereinstimmung X in Zelle
Dim ctrElement As Control       ' Variable für Steuerelemente in Userform
Dim blnReich As Boolean         ' Variable für Übereinstimmung TextBox Reichweite mit Zelle
Dim blnEingang As Boolean       ' Variable für Übereinstimmung TextBox Eingänge mit Zelle
Dim blnAusgang As Boolean       ' Variable für Übereinstimmung Textbox Ausgänge mit Zelle
' ListBox leeren
lblProdukte.Clear
If CheckQDispHDMI.Value = False And CheckQDispDVI.Value = False And _
CheckQDispVGA.Value = False And CheckQDispCOMP.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Eingangsschnittstelle"
Exit Sub
End If
If CheckDispHDMI.Value = False And CheckDispHDBT.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Ausgangsschnittstelle"
Exit Sub
End If
If BTN4K.Value = False And BTN1080p.Value = False Then
MsgBox "Bitte wählen Sie 4K oder 1080p aus."
Exit Sub
End If
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.Value = True Then
' 1 Eingang, 1 Ausgang --> Extender
If TBQ.Value = "1" And TBD.Value = "1" Then
'Wenn Reichweite kleiner / gleich angegebener Übertragungsstrecke
If CInt(TBM.Value)  Splitter
If CInt(TBQ) = CInt(TBM.Value) 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, 29).Value >= CInt(TBM) 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
' 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 = True Then
End If
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
Wo hab ich meinen Denkfehler?
Zunächst soll er wie von Dir beschrieben die Checkboxen abklappern.
Wenn er die hat soll er Anzahl der Ein- und Ausgänge prüfen und bei einem Treffer noch die Distanz abfragen.
Da ich es den Usern so einfach wie möglich machen möchte, würde ich gerne die Übertragungsdistanz gleich mit abfangen.
Der User soll nichts denken müssen :)
Oder könnten wir die Distanzen erst in der Listbox mit ausgeben und anschließend gleich an Hand dieser Filtern?
Danke Dir und viele Grüße
Chris

AW: Checkboxen als Kriterienfilter
25.05.2016 17:45:38
Beverly
Hi Chris,
wenn du deinen Code ordentlich einrückst, fällt dir auch auf wo etwas fehlt - so gibt es keine Fehlermeldung:
Private Sub CMDBTNShow_Click()
Dim lngZeile As Long            ' Schleifenzähler für Zeile
Dim blnKeinEintrag As Boolean   ' Variable für komplette Übereinstimmung X in Zelle
Dim ctrElement As Control       ' Variable für Steuerelemente in Userform
Dim blnReich As Boolean         ' Variable für Übereinstimmung TextBox Reichweite mit Zelle
Dim blnEingang As Boolean       ' Variable für Übereinstimmung TextBox Eingänge mit Zelle
Dim blnAusgang As Boolean       ' Variable für Übereinstimmung Textbox Ausgänge mit Zelle
' ListBox leeren
lblProdukte.Clear
If CheckQDispHDMI.Value = False And CheckQDispDVI.Value = False And _
CheckQDispVGA.Value = False And CheckQDispCOMP.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Eingangsschnittstelle"
Exit Sub
End If
If CheckDispHDMI.Value = False And CheckDispHDBT.Value = False Then
MsgBox "Bitte wählen Sie mindestens eine Ausgangsschnittstelle"
Exit Sub
End If
If BTN4K.Value = False And BTN1080p.Value = False Then
MsgBox "Bitte wählen Sie 4K oder 1080p aus."
Exit Sub
End If
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.Value = True Then
' 1 Eingang, 1 Ausgang --> Extender
If TBQ.Value = "1" And TBD.Value = "1" Then
'Wenn Reichweite kleiner / gleich angegebener Übertragungsstrecke
If CInt(TBM.Value)  Splitter
If CInt(TBQ) = CInt(TBM.Value) 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, 29).Value >= CInt(TBM) 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
' 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
End If
If blnReich = True Then
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

Ich habe den Code jedoch nicht getestet ob er das macht was du erreichen willst.


AW: Checkboxen als Kriterienfilter
31.05.2016 11:27:02
Chris
Hi Karin,
vielen lieben Dank!!! :)
Soweit läuft die Selektion und auch die Ausgabe in Spalten in der Listbox.
Ich kämpfe nun noch mit dem kopieren der Daten in die Zwischenablage.
Er übernimmt zwar etwas in die Zwischenablage beim Klick auf den entsprechenden Button, füge ich das aber in eine neue E-Mail oder ein anderes Dokument ein erscheinen nur Hieroglyphen.
Schau mal:

Private Sub cmdCopy_Click()
Dim objDataObject As DataObject
Dim strText As String
Dim intIndex As Integer
Set objDataObject = New DataObject
For intIndex = 0 To lblProdukte.ListCount - 1
strText = strText & lblProdukte.List(intIndex) & vbNewLine
Next
strText = Mid$(strText, 1, Len(strText) - 2)
objDataObject.SetText strText
objDataObject.PutInClipboard
End Sub
Wo hab ich mich verhaspelt?
Viele Grüße
Chris

AW: Checkboxen als Kriterienfilter
25.05.2016 17:16:37
Werner
Hallo Chris,
überprüfen mal deine If - End If wenn ich mich nicht verzählt habe dann fehlt ein End If
Gruß Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige