Suche mit For...next dauert zu lange

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm TextBox
Bild

Betrifft: Suche mit For...next dauert zu lange von: Sebastian
Geschrieben am: 28.02.2005 07:04:18

Guten Morgen,

ich habe eine Excel-Datei, in der stehen ca. 5600 Adresseinträge.
In meiner UserForm habe ich eine Suchfunktion mit For...next.
Wenn ein TextFeld geändert wird, sprich eine Eingabe erfolgt, durchsucht er für jeden Buchstaben, der eingegeben wird die entsprechenden Einträge.
Bsp.:
Eingabe ist A
Er sucht alle die mi A anfangen.
Nächste eingabe ist b
Es steht in der TextBox nun Ab
Er sucht alle Einträge die mit Ab anfange.
usw.

Hier ist der Code den ich verwende:

If txtKarteiNr <> "" And txtKarteiNr <> "Kartei-Nr." Then
Windows("KarteiGäste.xls").Activate
Sheets("Liste").Select
Range("A2:H65536").ClearContents
Sheets("Kartei").Select
Dim wks As Worksheet
Dim k&, i&

Set wks = Sheets("Liste")
k = 2

With Sheets("Kartei")
For i = 4 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 1) = txtKarteiNr Then
k = k + 1
.Range(.Cells(i, 1), .Cells(i, 8)).Copy wks.Cells(k, 1)
End If
Next
End With
Sheets("Liste").Select
With lbxKartei
.RowSource = "Liste!A3:H" & Sheets("Liste").Range("J1")
.ColumnWidths = "20;120;70;70;90;30;40;70"
End With
Windows("Hotel 1.0.xls").Activate
End If
If txtKarteiNr = "" Then
Windows("Karteigäste.xls").Activate
Sheets("Kartei").Select
With lbxKartei
.RowSource = "Kartei!A5:H" & Sheets("Kartei").Range("Z3")
.ColumnWidths = "20;120;70;70;90;30;40;70"
End With
Windows("Hotel 1.0.xls").Activate
End If

Jetzt dauert dieser Suchvorgang entsprechend lange bei 5600 Einträgen.
kann man das ganze schneller machen?

MfG
Sebastian

Bild


Betrifft: AW: Suche mit For...next dauert zu lange von: Heiko S.
Geschrieben am: 28.02.2005 07:48:38

Moin Sebsatian,

hast du schon den Standard für schneller machen drin.


Application.Screenupdating = False
Application.Calculation = xlCalculationManual
' dein Makro mit Schleife usw.
Application.Screenupdating = False
Application.Calculation = xlCalculationAutomatic


Gruß Heiko.


Bild


Betrifft: Application.Screenupdating = True von: kleiner Fehler
Geschrieben am: 28.02.2005 07:51:12

Application.Screenupdating = False
Application.Calculation = xlCalculationManual
' dein Makro mit Schleife usw.
Application.Screenupdating = True
Application.Calculation = xlCalculationAutomatic


Bild


Betrifft: Stimmt, is noch früh ! o.w.T. von: Heiko S.
Geschrieben am: 28.02.2005 07:54:01

.


Bild


Betrifft: AW: Stimmt, is noch früh ! o.w.T. von: Sebastian
Geschrieben am: 01.03.2005 06:58:41

Hallo,

das klappt super, einziges problem:
wenn ich z.B. beim Nachnamen B eingebe,
zeigt er mir nur einen Teil aller Nachnamen
die mit b beginnen und nicht alle.

gruß
Sebastian


Bild


Betrifft: AW: Stimmt, is noch früh ! o.w.T. von: Heiko S.
Geschrieben am: 01.03.2005 08:24:38

Moin Sebastian,

wie der Name Application.ScreenUpdating = False schon sagt, wird damit die Bildschirmaktualisierung unterbrochen.

1. Abhilfe, nicht soviel mit Select arbeiten, damit geht es dann auch schon schneller.
denn
TestVariable = Workbooks("Mappe1").Sheets("Tabelle1").Range("A1").Value
ist das gleiche wie,

Workbooks("Mappe1").Activate
Sheets("Tabelle1).Activate
Range("A1").Select
TestVariable = ActiveCell.Value

Die erste Variante ist nur schneller.


2. Du musst schauen wann du eine Bildschirmaktualisierung brauchst, ich denke doch nur wenn du was gefunden hast. Also wenn eine IF Bedingung erfüllt ist, dann kannst du darin ja kurz Application.ScreenUpdating = True setzen und dann wieder false.

Gruß Heiko


Bild


Betrifft: Problem behoben von: Sebastian
Geschrieben am: 01.03.2005 08:45:49

Hallo heiko,

habe den fehler gefunden. Hatte deine erste Version kopiert, wo am ende noch mal
Application.ScreenUpdating = False
stand und habe das ganze jetzt ersetzt durch
Application.ScreenUpdating = True

Nun funktionierts.

Danke für deine Hilfe.
Sebastian


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wie müsste "WENN" Abfrage lauten ??"