AW: VBA Summen im Formular nach Datum /Namen
28.02.2021 08:46:42
Werner
Hallo,
hier mal der Code:
Option Explicit
Private Sub ComboBox1_Change()
Dim i As Long, loLetzte As Long
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
If Me.ComboBox1 "" Then
For i = 1 To 12
Me.Controls("TextBox" & CStr(i)) = _
Evaluate("=SUMPRODUCT((MONTH(A2:A" & loLetzte & ")=" & i & ")*((B2:B" _
& loLetzte & ")=""" & Me.ComboBox1 & """)*(C2:C" & loLetzte & "))")
Next i
Else
Call UserForm_Initialize
End If
End Sub
Private Sub UserForm_Initialize()
Dim varValues As Variant, varItem As Variant
Dim objDictionary As Object, i As Long, loLetzte As Long
Set objDictionary = CreateObject("Scripting.Dictionary")
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, "A").End(xlUp).Row
varValues = .Range("B2:B" & loLetzte)
For Each varItem In varValues
objDictionary.Item(varItem) = vbNullString
Next
Me.ComboBox1.List = objDictionary.Keys
For i = 1 To 12
Me.Controls("TextBox" & CStr(i)) = _
Evaluate("=SUMPRODUCT((MONTH(A2:A" & loLetzte & ")=" _
& i & ")*(C2:C" & loLetzte & "))")
Next i
End With
Set objDictionary = Nothing
End Sub
In deiner Userform die Textboxen bitte umbenennen und zwar von TextBox1 (Januar) bis TextBox12 (Dezember) forlaufend.
Die ComboBox fülle ich über ein Dictionary. Ein Dictionary kann keine doppelten Werte aufnehmen. Das hat den Vorteil, dass du dann die Namen in Spalte B nicht mehrfach in der ComboBox hast.
Beim Laden der Userform werden die Monatsbeträge in den entsprechenden TextBoxen angezeigt. Wählst du einen Namen in der ComboBox aus, dann sind in den TextBoxen die Monatsbeträge der entsprechenden Person.
Löschst du den Eintrag in der ComboBox, dann werden dir wieder die Monatsbeträge in den TextBoxen angezeigt.
Gruß Werner