Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ComboBox - das Füllen dauert sehr lange

ComboBox - das Füllen dauert sehr lange
09.02.2009 09:56:01
tco99

Hallo zusammen,
ich habe in einer Userform eine ComboBox, die mit Werten aus den Spalten des ersten Worksheets gefüllt wird. Dabei werden doppelte Werte ausgefiltert und die Liste sortiert. Das Makro habe ich gefunden und für mich angepasst. Es funktioniert auch, jedoch braucht es sehr lange, bis die ComboBox gefüllt ist. Es dauert so ca. 10 Sekunden, wenn ich die Spalten A bis G haben möchte. So sieht mein Code aus:

Sub ComboBoxGerätetypenFüllen()
Übersicht.ComboBox2.Clear
'Werte aus Spalte A
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, ALetzte As Long
ALetzte = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To ALetzte
If Not IsEmpty(Cells(iRow, 1)) Then
xKey = Cells(iRow, 1).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
Übersicht.ComboBox2.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
'Werte aus Spalte B
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, ALetzte As Long
ALetzte = IIf(IsEmpty(Range("B65536")), Range("B65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To ALetzte
If Not IsEmpty(Cells(iRow, 2)) Then
xKey = Cells(iRow, 2).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
Übersicht.ComboBox2.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
'Werte aus Spalte C
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, ALetzte As Long
ALetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To ALetzte
If Not IsEmpty(Cells(iRow, 3)) Then
xKey = Cells(iRow, 3).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
Übersicht.ComboBox2.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
Call ComboBoxGerätetypenSortieren
Übersicht.ComboBox2.ListIndex = 0
Übersicht.ComboBox2 = ""
End Sub



Sub ComboBoxGerätetypenSortieren()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With Übersicht.ComboBox2
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


Ich habe den Code hier gekürzt hineinkopiert, frage normalerweise Spalten A bis E und G bis H ab.
Ich habe versucht, selbst für mehr Geschwindigkeit zu sorgen, in dem ich die folgende Zeile angepasst habe, jedoch ohne Erfolg:
Vorher:
ALetzte = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
Nachher:
ALetzte = IIf(IsEmpty(Range("A2000")), Range("A2000").End(xlUp).Row, 2000)
Und so weiter ...
Hat jemand eine Idee, warum das trotzdem so lange dauert, auch wenn ich nur bis Zeile 2000 durchsuchen lasse?
Gruß
Erdogan

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 10:17:00
Ramses
Hallo
Das sind ja zig tausende von schleifen, und die Sortierschleife potenziert das ganze auch noch.
du hast zwei varianten aus meiner Sicht:
Alle Daten in ein Array einzulesen und von Dort aus über das Dictonary-Object einzulesen und zu sortieren.
Oder,... und das kannst du selber machen und ist ziemlich sicher genauso schnell.
Erstelle mit dem Makro eine leere temporäre Tabelle
Kopiere alle deine Daten aus den Spalten in diese Tabelle in Spalte A untereinander.
(wie du die letzte freie Zelle bestimmst, weisst du ja)
Anschliessen in der Spalte Daten - Filter - spezial Filter Option: Ohne Duplikate in die Nachbarspalte kopieren
dort anschliessend von EXCEL sortieren lassen
Die Daten in die Combobox einlesen
Temporäre Tabelle löschen.
Das ganze kannst du, mit ausnahme der Kopieraktion, mit dem makrorekorder aufzeichnen und anschliessend optimieren
Gruss Rainer
Anzeige
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 10:45:17
tco99
Hallo Rainer,
dass mit dem temporären Blatt ist eine super Idee. Ich habe es auch gleich umgesetzt. Da sich die Inhalte öfter ändern, lösche ich das temporäre Blatt nicht, sondern lasse es mit dem Namen "Hilfsblatt" weiter bestehen, leere es nur nach der Erstellung der Liste.
Wenn man die Bildschirmaktualisierung abschaltet, sieht es auch nicht mehr so wild aus :-)
Ich bedanke mich ganz herzlich!
Viele Grüße
Erdogan
Anzeige
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 10:26:25
Tino
Hallo,
ich möchte mir Deinen Code jetzt nicht antun,
habe Dir ein Beispiel aufgebaut wie ich es machen würde.
https://www.herber.de/bbs/user/59263.xls
Gruß Tino
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 10:58:03
tco99
Hallo Tino,
danke für deine Hilfe und die Datei, die du für mich gemacht hast. Ich habe gesehen, dass die ComboBox nur mit den Werten der Spalte A gefüllt wird. Ich habe eine zweite Spalte gemacht und sie mit Zahlen gefüllt. Dann habe ich versucht, den Code anzupassen, jedoch ohne Erfolg.
Vielleicht habe ich meine Frage nicht gut genug formuliert. Die ComboBox sollte sich mit den Inhalten mehrerer Spalten füllen.
Ich sende dir nochmal die Datei mit einer zweiten Spalte.
https://www.herber.de/bbs/user/59264.xls
Bitte mache dir keine große Mühe damit, denn die Lösung von Rainer (Ramses) ist schon super.
Vielen Dank,
Erdogan
Anzeige
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 11:32:22
Tino
Hallo,
auch wenn Du die Lösung schon bekommen hast, hier noch die geänderte Version.
https://www.herber.de/bbs/user/59266.xls
Gruß Tino
AW: ComboBox - das Füllen dauert sehr lange
09.02.2009 13:40:21
tco99
Hallo Tino,
das ist ja cool, die ComboBox hat gleich zwei Spalten :-)
Beide Spalten sind sortiert. Auch wenn ich auf die Zahl in der ComboBox klicke, wird der Buchstabe ausgewählt. Ich weiß schon, wo ich das verbauen kann :-)
Vielen Dank und viele Grüße
Erdogan
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige