Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1572to1576
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

Abhängige ComboBoxen mit zeitlicher Auswertung

Abhängige ComboBoxen mit zeitlicher Auswertung
03.08.2017 19:19:54
Markus
Liebes Forum,
folgendes Anliegen habe ich an euch:
Ich will für meine Tabelle eine UserForm erstellen, auf der sich 3 ComboBoxen befinden werden. Diese 3 ComboBoxen sind voneinander abhängig. Das Ergebnis mündet dann in eine ListBox.
Mein Tabellenblatt sieht folgendermaßen aus:
Spalte A: Datum
Spalte B: Verkäufer
Spalte C: Projektname
Spalte D: Anzahl der verkauften Einheiten
Spalte E: Umsatz
Nun will ich, dass man mittels ComboBox1 den Verkäufer auswählt.
Die ComboBoxen 2 und 3 sollen den Zeitraum begrenzen, welcher betrachtet wird. Sprich, in ComboBox2 steht das Startdatum und in ComboBox3 das Enddatum. Die ListBox soll sich dann anhand der getroffenen Auswahl in den ComboBoxen 1-3 zusammenstellen.
ListBox Column 1: Name des Verkäufers
ListBox Column 2: Projektname
ListBox Column 3: Anzahl der verkauften Einheiten
ListBox Column 4: Umsatz
Mein Problem ist, dass ich es nicht schaffe, die ComboBox1 mit den ComboBoxen 2 und 3 zu verbinden. Folgenden Code verwende ich bisher (Danke nochmal an ChrisL dafür!):
Private Sub ComboBox2_Change()
Call LbLaden
End Sub
Private Sub ComboBox3_Change()
Call LbLaden
End Sub
Private Sub UserForm_Initialize()
Dim iZeile As Long
bLoad = True
With Worksheets("Tabelle1")
For iZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ComboBox1.AddItem .Cells(iZeile, 1)
ComboBox2.AddItem .Cells(iZeile, 1)
Next iZeile
End With
ComboBox2.ListIndex = 0
ComboBox3.ListIndex = ComboBox3.ListCount - 1
ListBox1.ColumnCount = 4
bLoad = False
Call LbLaden
End Sub
Private Sub LbLaden()
Dim iZeile As Long
Dim iCounter As Long
Dim arList() As Variant
If bLoad Then Exit Sub
With Worksheets("Tabelle1")
ListBox1.Clear
If CDate(ComboBox2) > CDate(ComboBox3) Then
MsgBox "Start darf nicht grösser Ende sein"
Exit Sub
End If
For iZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(iZeile, 1) >= CDate(ComboBox2) And .Cells(iZeile, 1) 
Ich würde euch gerne ne Beispielsdatei hochladen, aber irgendwie geht es von meinem Mac leider nicht.
Besten Dank für eure Hilfe!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abhängige ComboBoxen mit zeitlicher Auswertung
05.08.2017 15:53:15
fcs
Hallo Markus,
da hast du dich beim Befüllen der Comboxen mit den Daten aus der Tabelle etwas vertan. Du hast die Datumswerte auh in die Combobox1 geladen und Combobox3 garnicht befüllt. das führt dann direkt zum Crash.
Da sich Verkäufernamen und evtl.auch die Datumswerte wiederholen, sollten die Boxen ohne doppelte Werte befüllt werden.
Bei größeren Daten-Mengen sollten die Tabellen-Daten in ein Daten-Array geladen werden. Dann ist die Makro-Ausführung bei einem Wechsel in der Combobox-Auswahl wesenlich schneller.
Ich hoffe die Anpassung ist unter der Mac-Version auch lauffähig, denn leider sind nicht alle Windows-VBA-Funktionen auch in der Mac-Version vorhanden bzw. kompatibel.
Gruß
Franz
'Userform-Code erstellt unter Excel 2010 für Windows
Option Explicit
Private bload As Boolean    'wichtig für korrekte Funktion während der Initialisierung des  _
Userforms
Private arrData             'Array in dem die Tabellendaten gespeichert werden
Private Sub ComboBox1_Change()
Call LbLaden
End Sub
Private Sub ComboBox2_Change()
Call LbLaden
End Sub
Private Sub ComboBox3_Change()
Call LbLaden
End Sub
Private Sub UserForm_Initialize()
Dim lngZei As Long, lngSpa As Long
Dim iItem As Integer
Dim varWert
On Error GoTo Fehler
bload = True
With Worksheets("Tabelle1")
'letzte Zeile mit Inhalt in SPalte A im Tabelleblatt
lngZei = .Cells(.Rows.Count, 1).End(xlUp).Row
'Tabellenblatt-Daten aus Spalte A bis E in Daten-Array laden (für schnellere Makro-Ausfü _
hrung)
arrData = .Range(.Cells(1, 1), .Cells(lngZei, 5))
End With
'Comboboxen ohne doppelte Werte sortiert mit den Auswahldaten füllen
For lngSpa = 1 To 2 'Datum und Verkauufer
Select Case lngSpa
Case 1 'Datum
For lngZei = 2 To UBound(arrData, 1)
If arrData(lngZei, lngSpa)  "" Then
varWert = arrData(lngZei, lngSpa)
With Me.ComboBox2
If .ListCount = 0 Then
.AddItem varWert
Else
If CDate(.List(.ListCount - 1, 0))  "" Then
varWert = arrData(lngZei, lngSpa)
With Me.ComboBox1
If .ListCount = 0 Then
.AddItem varWert
Else
If .List(.ListCount - 1, 0)  CDate(ComboBox3) Then
MsgBox "Start darf nicht groesser Ende sein"
Exit Sub
End If
For lngZei = 2 To UBound(arrData, 1)
If arrData(lngZei, 1) >= CDate(ComboBox2) And arrData(lngZei, 1) 

Anzeige
AW: Abhängige ComboBoxen mit zeitlicher Auswertung
06.08.2017 17:10:58
Markus
Hallo Franz,
Vielen Dank für deine Mühe - Marco funktioniert einwandfrei!
Bloß die Verkäufernamen (gleichen) kommen bei mir mehrfach vor. Habe es heute mit
Set mobjDic = CreateObject("Scripting.Dictionary") probiert, jedoch erfolglos.
Besten Dank.
AW: Abhängige ComboBoxen mit zeitlicher Auswertung
06.08.2017 20:44:38
fcs
Hallo Markus,
ich hab die Makros bzgl. erstellen der Auswahllisten für die Comboboxen noch einmal etwas überarbeitet.
Scheinbar hatte ich in meiner Testdatei eine Sortierung der Daten, bei der dies nicht passierte.
Excel (Windows)-Testdatei
https://www.herber.de/bbs/user/115284.xlsm
Text-Datei mit Userform-Code
https://www.herber.de/bbs/user/115285.txt
Gruß
Franz
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige