Durch je Menge Hilfe durch dieses Forum habe ich ein Projekt erstellt, dass Ausmaße eines fast richtigen Programmes hat.
Dafür muss ich nachfolgend allen ehemalige und auch zukünftigen Helfern danken.
Trotzdem bleiben für mich als VBA-Anfänger noch einige Fragen offen.
Eine Frage ist...
Kann ich bei dem Array, das bestimmte Daten über mehrere Blätter enthält, für die mehrspaltige ListBox auch einen Filter setzen, der in erster ComboBox (cbx_FilterMonat) mit Auswählen des Monats die Einträge nach Monat anzeigt?
Private Sub UserForm_Initialize()
'----------- ListBox mit Daten von allen Sheets füllen mit Hilfe von ralf_b von herber.de ------ _
Dim lngMonth As Long, ialngIndex As Long, lngRow As Long
Dim lngColumn As Long, lngDauer As Long
Dim datBeginn As Date, datEnde As Date, strBeginnOrt As String
Dim strEndeOrt As String, strReiseOrt As String
Dim avntValues() As Variant, avntTemp As Variant, vntItem As Variant
Dim datAbgabe As Date, datAnnahme As Date, datGezahlt As Date
For lngMonth = 1 To 2 'auf 12 Monate erhöhen!!!
lngRow = 12
With Worksheets(MonthName(Month:=lngMonth))
Do
If IsEmpty(.Cells(lngRow + 1, 26).Value) Then
lngRow = .Cells(lngRow, 26).End(xlDown).Row
Else
lngRow = lngRow + 1
End If
If lngRow = 24
avntTemp(1, 7) = "24:00"
If strBeginnOrt = "A" Or strEndeOrt = "A" Then
avntTemp(1, 8) = "40,00 "
ElseIf strBeginnOrt = "I" Or strEndeOrt = "I" Then
avntTemp(1, 8) = "40,00 "
Else
avntTemp(1, 8) = "28,00 "
End If
Case Is > 8
If strBeginnOrt = "A" Or strEndeOrt = "A" Then
avntTemp(1, 8) = "27,00 "
ElseIf strBeginnOrt = "I" Or strEndeOrt = "I" Then
avntTemp(1, 8) = "27,00 "
Else
avntTemp(1, 8) = "14,00 "
End If
Case Else
avntTemp(1, 8) = "Fehler"
Debug.Print vntItem
End Select
For Each vntItem In avntTemp
Select Case lngColumn
Case 2, 5, 7
avntValues(lngColumn, ialngIndex) = Format$(vntItem, "Hh:Nn")
lngColumn = lngColumn + 1
Case Else
avntValues(lngColumn, ialngIndex) = vntItem
lngColumn = lngColumn + 1
End Select
Next
'schreibt den Tabellennamen und die Zeile getrennt durch ein Pipe in das _
Array
'wird für das Click-Event lst_Dienstreise benötigt
avntValues(12, ialngIndex) = MonthName(Month:=lngMonth) & "|" & CStr(lngRow) _
ialngIndex = ialngIndex + 1
Else
Exit Do
End If
Loop
End With
Next
lst_Dienstreise.Column = avntValues
'--------- Ende Füllen ListBox ---------------------------------------------------------------
'--------- ComboBox "Monat" mit Monatsnamen vom Sheet füllen ---------------------------------
Dim j As Integer
cbx_FilterMonat.AddItem "alle Monate"
For j = 1 To 2 'auf 12 Monate ändern
cbx_FilterMonat.AddItem Worksheets(j).name
Next j
cbx_FilterMonat.ListIndex = 0 'ersten Eintrag als Standard
'--------- ComboBox "Reisezweck" füllen -------------------------------------------------------- _
cbx_FilterZweck.AddItem "alle Reisezwecke"
cbx_FilterZweck.ListIndex = 0
'--------- ComboBox "offene Abrechungen" füllen ------------------------------------------------ _
cbx_FilterOffen.AddItem "keine"
cbx_FilterOffen.ListIndex = 0
https://www.herber.de/bbs/user/141457.xlsm
Wie kann ich bei den drei ComboBoxen die Filter setzen, die vielleicht sogar noch untereinander in Abhängigkeit sind.
Also im Monat "Januar" keine "keine eingereicht"en Abrechnungen vorhanden sind, der ComboBox-Eintrag auch nicht angeboten wird.
Gruß
Peer