Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

was ist besser wie For - next

was ist besser wie For - next
KLE
Hi,
ich habe eine listbox mit ca. 1000 Artikeln. Jetzt möchte ich gern per
With objLBArtikel
For h = .ListCount - 1 To 0 Step -1
if .Selected(h) = True then
worksheets("Temp").cells(a, 2).value = .list(h,3)
end if
Next h
End With
prüfen, welche Datensätze markiert wurden, um diese zu exportieren. (dazu schreibe ich diese in ein Temp-Blatt (nur die ArtikelNr.). Das dauert aber eine ganze weile...
Das gleiche gilt, wenn ich "alle" markieren lasse mit .selected(h) = True in der Schleife...
Gibt es eine bessere Methode (schneller) um in einer Listbox zu ermitteln, welche Datensätze eine markierung haben ? Wenn ja, welche ?!
Vielen Dank !
Gruß
Kay

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: was ist besser wie For - next
24.08.2011 09:22:17
Tino
Hallo,
habe dies mal nachgebaut, bei geht dies sehr schnell.
1000 Datensätze in der Listbox und davon 50 markiert dauer 0,015 Sekunden.
Ich schätze da muss noch was anderes sein,
evtl. wird bei jedem schreiben in die Zellen eine Berechnung auf der Tabelle oder die Tabellen ausgeführt?
Vielleicht auch durch Volatile Formel wie zum Beispiel Indirekt,
die werden ständig neu Berechnet obwohl diese mit dem Bezug der Eingabezelle
nichts zu tun haben oder größere Matrixformeln, oder oder oder ...?.
Versuch mal und schalte die Automatische Berechnung auf manuell und
am Ende wieder auf automatisch.
Gruß Tino
Anzeige
AW: was ist besser wie For - next
24.08.2011 09:37:40
Erich
Hallo Kay,
zuerst zwei Fragen:
1.
Woher kommt in "worksheets("Temp").cells(a, 2)" das a? Sollte das h (oder besser h+1) heißen?
2.
Warum lässt du die Schleife rückwärts durchlaufen?
Ich vermute, dass die Laufzeit darauf zurückzuführen ist, dass du bei jedem Treffer einzeln einen Wert in Temp schreiben lässt.
Es ist vermutlich scneller, die Werte in einem Array zu sammeln und dann das Arrray auf einen Schlag in das Blatt zu schreiben.
Nun ein Vorschlag zum Ausprobieren:

Dim h As Long, arrE(), lngE As Long, arrN()
With objLBArtikel
ReDim arrE(1 To .ListCount)
For h = 0 To .ListCount - 1
If .Selected(h) = True Then
lngE = lngE + 1
arrE(lngE) = .List(h, 3)
End If
Next h
End With
If lngE > 0 Then
ReDim arrN(1 To lngE, 1 To 1)
For h = 1 To lngE
arrN(h, 1) = arrE(h)
Next h
Worksheets("Temp").Cells(1, 2).Resize(lngE) = arrN
End If
Geht das schneller?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: was ist besser wie For - next
24.08.2011 09:54:27
Tino
Hallo Erich,
hatte ich auch erst gedacht,
aber selbst wenn ich von den 1000 Datensätzen jeden zweiten markiere
läuft der Code gerade mal 0,09 Sekunden.
Gruß Tino
Vielen dank für Eure Antworten...
29.08.2011 23:20:40
KLE
Hallo Tino, Hallo Erich,
...sorry, war die letzten Tage komplett in einem Projekt eingebunden und kam nicht mehr dazu Euch zu antworten. Vorweg vielen Dank für Eure Gedanken und antworten an dieser Stelle... ;o)
Ich habe noch einmal alles getestet und bin die Prozedur jeden Schritt einzeln durchgegangen. So konnte ich "mein" Problem auch - denke ich - besser lokalisieren. Aber der Reihe nach:
@ Erich: zu 1) ... a ist die Zeile und wird einen Schritt weiter oben aus der listbox übergeben. Sie ist im Grunde nur h + 5. Denn die Liste beginnt im Tabellenblatt etwas tiefer...
zu 2) Ich lasse es daher rückwärts laufen, da ich in einem frühren Forumsbeitrag einmal die Empfehlung erhielt - Listboxen stets rückwärts laufen zu lassen... dass habe ich nun irgendwie so übernommen, ohne wirklich eine zwingende Notwendigkeit darin zu sehen...
Das ganze in einem Array zu packen, geht einen Hauch schneller --- aber mein eigentliches Problem war, dass ich auf der Listbox noch ein Change-Ereignis hatte, welches ich per Tippfehler nicht auf Bloc gesetzt hatte. Korrekte Bloc-Einstellung und das ganze dauert keine Sekunde mehr...
Es tut mir leid, Euch damit aufgehalten zu haben, denn von dem Bloc konntet ihr nichts wissen...aber ich habe da auch nicht dran gedacht, da es an einer ganz anderen Stelle im Code auftaucht und eigentlich eher "veraltet" war...habe die Datei von einem Vorgänger übernommen...
Dennoch vielen Dank an Euch, lieben Gruß
Kay
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige