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

Tabelle filtern mittels Objekten

Tabelle filtern mittels Objekten
16.06.2017 10:13:51
Fxyz
Hallo Herbers Excel Forum,
ich komme bei einer Excel / VBA - Programmierung irgendwie nicht weiter bzw. stehe auf dem Schlauch und auch die Google Suche konnte mir nich wirklich weiterhelfen.
Folgende Aufgabe:
Ich habe in einem Reiter eine Art "Datenbank" in der in einer Liste verschiedene Informationen stehen.
Auf dem ersten Reiter "Auswahl" möchte ich mittels "Drop-Down-ActiveX" Elementen diese Tabelle durchsuchen. Dabei soll möglichst flexibel eine der Spalten mit diesen Objekten gefiltert werden können, die anderen sollen dann die noch möglichen Werte anzeigen und auch wieder Filtermöglichkeiten ergeben (also eigentlich eine klassische Filterung der Tabelle nur mittels Dropdown - Objekten).
Ich habe erstmal einfach angefangen und habe versucht nacheinander die Spalten zu filtern. Das funktioniert so weit auch ganz gut, dass wenn ich aus A etwas auswähle, nur die Werte in B angezeigt werden, die möglich sind. Nun wähle ich in B etwas aus aber in C wird nichts mehr angezeigt und ich verstehe nicht warum nicht...
Zusätzliche Randbedingungen:
- Keine doppelten Werte sollen angezeigt werden
- Sortierung der angezeigten Werte (noch nicht realisiert)
Könnt ihr mir weiterhelfen?
hier ist meine Beispieldatei: https://www.herber.de/bbs/user/114306.xlsm
anbei der VBA Code:
Option Explicit
Dim s As Integer
Private Sub ComboBox1_Change()
Dim rCell As Range, Key
Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary")
ComboBox2.Clear
For Each rCell In Worksheets("Datenbank").Range("A2", Worksheets("Datenbank").Cells(Rows. _
Count, "A").End(xlUp))
If rCell.Value = ComboBox1.Value Then
If Not Dic.exists(LCase(rCell.Offset(, 1).Value)) Then
Dic.Add LCase(rCell.Offset(, 1).Value), Nothing
End If
End If
Next rCell
For Each Key In Dic
ComboBox2.AddItem Key
Next
End Sub
Private Sub ComboBox2_Change()
Dim rCell As Range, Key
Dim Dic2 As Object: Set Dic2 = CreateObject("Scripting.Dictionary")
ComboBox3.Clear
For Each rCell In Worksheets("Datenbank").Range("B2", Worksheets("Datenbank").Cells(Rows. _
Count, "B").End(xlUp))
If rCell.Value = ComboBox2.Value Then
If Not Dic2.exists(LCase(rCell.Offset(, 2).Value)) Then
Dic2.Add LCase(rCell.Offset(, 2).Value), Nothing
End If
End If
Next rCell
For Each Key In Dic2
ComboBox3.AddItem Key
Next
End Sub

Private Sub Worksheet_Activate()
ComboBox1.Clear
For s = 3 To Worksheets("Datenbank").Range("A65536").End(xlUp).Row
If Worksheets("Datenbank").Cells(s, 1).Value  "" Then
If Application.WorksheetFunction.CountIf(Worksheets("Datenbank").Range(Worksheets(" _
Datenbank").Cells(s, 1), _
Worksheets("Datenbank").Cells(1, 1)), Worksheets("Datenbank").Cells(s, 1).Value) = 1 _
Then ComboBox1.AddItem (Worksheets("Datenbank").Cells(s, 1).Value)
End If
Next
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle filtern mittels Objekten
16.06.2017 10:25:11
Beverly
Hi,
versuche es mal so:
        If rCell.Value = CLng(ComboBox2.Value) Then
If Not Dic2.exists(LCase(rCell.Offset(, 1).Value)) Then
Dic2.Add LCase(rCell.Offset(, 1).Value), Nothing
End If
End If


AW: Tabelle filtern mittels Objekten
16.06.2017 10:46:51
Fxyz
Hi Beverly,
vielen Dank für deinen Hinweis. So wird erstmal das richtige angezeigt, leider bekomme ich jetzt einen Laufzeitfehler '13' Typen unverträglich für die Zeile If rCell.Value = CLng(ComboBox2.Value) Then :(
AW: Tabelle filtern mittels Objekten
16.06.2017 11:02:56
Beverly
Hi,
prüfe vorher, ob ComboBox2 nicht leer ist:
    If ComboBox2  "" Then
For Each rCell In Worksheets("Datenbank").Range("B2", Worksheets("Datenbank").Cells( _
Rows.Count, "B").End(xlUp))
If rCell.Value = CLng(ComboBox2.Value) Then
If Not Dic2.exists(LCase(rCell.Offset(, 1).Value)) Then
Dic2.Add LCase(rCell.Offset(, 1).Value), Nothing
End If
End If
Next rCell
For Each Key In Dic2
ComboBox3.AddItem Key
Next
End If


Anzeige
AW: Tabelle filtern mittels Objekten
16.06.2017 10:30:12
Luschi
Hallo Fxyz,
warum willst Du Kraft & Spucke darauf verwendenb, was es als Formatvorlage 'Als Tabelle formatieren' seit Excel 2003/2007 längst gibt?
Von solchem Vorbeiprorammieren, statt Nutzung der Excel-Möglichkeiten, habe ich mich verabschiedet.
Hier sollte man den User viel stärker einbinden und ihn schulen.
Gruß von Luschi
aus klein-Paris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige