Im Moment arbeite ich mit der Erstellung einer Benutzerform mit 40 Combobox alle die gleiche Liste haben. Mein Problem ist das Füllen all dieser Combobox macht die userform.show
langsam. Die Liste, die in diesen Comboboxes gefüllt wird, ist eine sehr lange Liste (46542 Zeilen und Listenlänge kann variieren). Die Liste besteht aus 3 Spalten.Füllen Mehrere Comboboxen macht VBA-Benutzerform langsam
Ich habe herumalbern mit CONCATENATE die ganze Liste, aber das macht nicht viel von einer Änderung. Auch, weil ich den Wert haben muss, wenn er in der Combobox als CONCATENATE mit allen 3 Spalten in der Combobox etc. ausgewählt wird, wenn die Zeile Nr. 1 in der Combobox, anstatt nur Spalte 1 in das Textfeld von comboxbox zu schreiben, gibt es alle 3 Spalten zurück. Das bedeutet, dass ich tatsächlich 4 Spalten habe, wobei die erste CONCATENATE ist und im Dropdown-Menü versteckt ist.
Also meine Frage ist, gibt es eine Möglichkeit, den Prozess mehr Licht zu tun?
So, hier ist der Code:
Private Sub UserForm_Initialize()
Set tsheet = ThisWorkbook.Sheets("Players")
Dim v As Variant, i As Long
v = tsheet.Range("A2:l" & Worksheets("Players").Cells(Rows.Count,
1).End(xlUp).Row).Value
With Me.ComboBox1
.RowSource = ""
.ColumnCount = 4
.BoundColumn = 2
.ColumnWidths = "1;50;50;50" 'Hide first column in dropdown
For i = LBound(v) To UBound(v)
.AddItem v(i, 1) & " " & v(i, 2) & " " & v(i, 3)
.List(.ListCount - 1, 1) = v(i, 1)
.List(.ListCount - 1, 2) = v(i, 2)
.List(.ListCount - 1, 3) = v(i, 3)
Next i
End With
With Me.ComboBox2
.RowSource = ""
.ColumnCount = 4
.BoundColumn = 2
.ColumnWidths = "1;50;50;50" 'Hide first column in dropdown
For i = LBound(v) To UBound(v)
.AddItem v(i, 1) & " " & v(i, 2) & " " & v(i, 3)
.List(.ListCount - 1, 1) = v(i, 1)
.List(.ListCount - 1, 2) = v(i, 2)
.List(.ListCount - 1, 3) = v(i, 3)
Next i
End With
Dieser Code geht weiter, bis es combox40 Hit
Mein alter Code wurde ziemlich schnell arbeiten, aber es hat nicht die Spalte, die verketteten wurde
ComboBox3.ColumnWidths = "50;50;50" 'COLUMN WITH OF LISTBOX
ComboBox3.ColumnCount = 3
'COLUMN NUMBER OF LISTBOX
ComboBox3.List = tsheet.Range("A2:l" &
Worksheets("Players").Cells(Rows.Count, 1).End(xlUp).Row).Value
Definieren Sie nicht 'tSheet' und verwenden Sie' 'Worksheets (" Player ")' in Ihrem Code .... verwenden Sie 'tsheet' – jsotola
es besteht keine Notwendigkeit,' .RowSource' '.ColumnCount'' .BoundColumn' zu definieren '.ColumnWidths' Eigenschaften zur Laufzeit .... diese Werte werden mit der Arbeitsmappe gespeichert ....Legen Sie diese in einer separaten Unterroutine fest, die Sie nur einmal ausführen, und speichern Sie anschließend die Arbeitsmappe. wiederholen Sie die Unter wenn Sie Änderungen an diesen Werten – jsotola