Ich arbeite an einem Blatt, das tägliche Verkaufsdaten haben. Ich muss die Daten zwischen einem bestimmten Datum zusammenfassen. Dazu möchte ich ein Benutzerformular mit 2 Kombinationsfeld verwenden (Ich habe noch nie zuvor mit Benutzerformularen & Kontrollen gearbeitet). Ich fügte die Einzelteile in Kombinationsfeld hinzu, indem ich unten Codes verwendete -Entfernen Sie doppelte Formular-Combobox
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "A2:A6724"
ComboBox2.RowSource = "A2:A6724"
End Sub
dieses funktionierte gut. Aber hier ist ein Problem, dass es die gleichen Elemente viele Male wiederholt, da es viele Transaktionen in demselben Datum im Blatt gibt.
Um dieses Problem zu lösen suche ich Hilfe im Internet & fand eine Prozedur, die ich modifiziere und in meinem Code verwendet. das funktioniert richtig, aber es hat auch ein kleines Problem, dass, wenn ich auf ein Datum aus der Dropdownliste des Kombinationsfelds klicke, das Datumsformat ändert (dh wenn ich 10/12/2016 auswähle zeigt es 12-okt-2016 aber es sollte sein 10-Dec-2016) hier ist der Code modifizieren ich eigentlich weiß ich nicht, was es tut, aber ich denke, arbeiten ist für me-
Private Sub UserForm_Initialize()
'ComboBox1.RowSource = "A2:A6724"
'ComboBox2.RowSource = "A2:A6724"
Dim Coll As Collection, cell As Range, LastRow As Long
Dim blnUnsorted As Boolean, i As Integer, temp As Variant
Dim SourceSheet As Worksheet
Set SourceSheet = Worksheets("Sheet1")
LastRow = SourceSheet.Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
Set Coll = New Collection
With ComboBox1
.Clear
For Each cell In SourceSheet.Range("A2:A" & LastRow)
If Len(cell.Value) <> 0 Then
Err.Clear
Coll.Add cell.Text, cell.Text
If Err.Number = 0 Then .AddItem cell.Text
End If
Next cell
End With
Set SourceSheet = Worksheets("Sheet1")
LastRow = SourceSheet.Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
Set Coll = New Collection
With ComboBox2
.Clear
For Each cell In SourceSheet.Range("A2:A" & LastRow)
If Len(cell.Value) <> 0 Then
Err.Clear
Coll.Add cell.Text, cell.Text
If Err.Number = 0 Then .AddItem cell.Text
End If
Next cell
End With
Set Coll = Nothing
Set SourceSheet = Nothing
End Sub
ich werde für jede Hilfe sehr dankbar sein.
Wenn Sie eine 'Collection' verwenden, um eindeutige Werte zu erhalten, sind Sie besser mit einem' Dictionary' dran. http://stackoverflow.com/documentation/vba/3667/scripting-dictionary-object#t=20170314080854523668 –