Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1100to1104
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

Code sehr langsam trotz(ohne select)

Code sehr langsam trotz(ohne select)
chris
Hallo VBA experten,
habe eine kurze frage.ich habe einen Code der sehr langsam ist.
Was kann ich tun um diesen zu beschleunigen ?
Ich badanke mich an alle helfer schon im voraus.Ihr seid spitze !
Option Explicit
Dim x As Double
Dim suchbegriff As String
Sub start()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Tabelle1")
For x = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
suchen_einfuegen (UCase(.Cells(x, 1)))
Next
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub suchen_einfuegen(sbegriff)
Dim c
With Workbooks("vorab.xls").Worksheets("Final").Range("CI13:CI" & Rows.Count)
Set c = .Find(sbegriff, LookIn:=xlValues)
If Not c Is Nothing Then
MsgBox c.Row
End If
End With
End Sub

AW: Code sehr langsam trotz(ohne select)
14.09.2009 15:28:10
Horst
Hi,
falls es Ereignismakros gibt, die Events ausschalten(einschalten am Schluss nicht vergessen).
mfg Horst
AW: Code sehr langsam trotz(ohne select)
14.09.2009 15:42:42
fcs
Hallo Chris,
das kann's nicht sein. Hab es eben mit über 5000 Datenzeilen probiert. Antwortzeit richtet sich nach der Klickgeschwindigkeit des Zeigefingers auf der Maus - also deutlich unter 1/2 Sekende.
Was passiert denn sonst noch so in der Datei, obwohl diesse Makro auch keine Ereignismakros auslösen sollte.
Gruß
Franz
Der Vollständigkeit halber solltest du alle Parameter bei Find angeben. Die Manuell im Dialog und per Makro gesetzte Einstellungen bleiben erhalten, so dass Makros sonst ggf. nicht das gewünschte Ergebnis liefern.
Set c = .Find(What:=sbegriff, LookIn:=xlValues, Lookat:=xlWhole)
Anzeige
AW: Code sehr langsam trotz(ohne select)
14.09.2009 18:07:12
chris
Danke euch beiden.
Mal schauen ob ich morgen was finde.
er bleibt immer bei der find hängen ca eine halbe bis 1 sekunde auch wenn ich mit f8 durchgehe merke ich das:(
schönen abend noch!
AW: Code sehr langsam trotz(ohne select)
15.09.2009 08:07:42
chris
Hallo Franz,
ich mache noch einmal auf.
Habe das programm von mir gerade noch einmal getestet.
Also die Antwortzeit ist manchmal länger als 1 sekunde.
Aber das nur n den Fällen wenn der Suchbegriff nicht gefunden wird.
Also wenn er diese zeile durchläuft Set c = .Find(sbegriff, LookIn:=xlValues)
und nichts findet.Dann dauert der durchlauf länger.
Kann man da was machen ?
die Suchmatrix geht von Range("CI13:CI50000")
VieleN dank noch einmal !
lg Chris
Anzeige
AW: Code sehr langsam trotz(ohne select)
15.09.2009 09:40:38
fcs
Hallo Chris,
du solltest meinen Tipp bezüglich der Syntax von Find schon beherzigen.
.Find(What:=sbegriff, LookIn:=xlValues, Lookat:=xlWhole)
oder
.Find(What:=sbegriff, LookIn:=xlValues, Lookat:=xlPart)

Wenn bei dir im Dialog "Suchen" die Optionen für "Gesamten Zellinhalt vergleichen" oder auch "Groß-/Kleinschreibung beachten" nicht korrekt gesetzt sind geht die Suche ggf. in die falsche Richtung.
In deiner ursprünglichen Frage hattes du den zu durchsuchenden Bereich variabel (.End(xlup) ).
50000 Zellen fix zu durchsuchen dauer naturlich länger als ggf. einen Bereich von 5000 zu durchsuchen, obwohl das bei der Find-Methode eigentlich keine so große Rolle spielt.
Du suchst ja in einer externen Datei. Evtl. ist auch die Größe der Dateien so groß, dass Excel viele Daten hin- und herjonglieren muss, um jeweils auf den Suchbereich zugreifen zu können.
Probiere mal die folgende Variante.
Gruß
Franz
Sub start2()
Dim rngSuch As Worksheet
Dim c As Range
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Set rngSuch = Workbooks("vorab.xls").Worksheets("Final").Range("CI13:CI" & Rows.Count)
With ThisWorkbook.Worksheets("Tabelle1")
For x = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set c = rngSuch.Find(what:=UCase(.Cells(x, 1)), LookIn:=xlValues, lookat:=xlWhole)
'        Set c = rngSuch.Find(what:=UCase(.Cells(x, 1)), LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
MsgBox c.Row
End If
Next
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Code sehr langsam trotz(ohne select)
15.09.2009 10:51:21
chris
Hallo Franz,
dein code läuft bei mir nicht.
Es kommen immer wieder fehler.
Danke aber trotzdem !
AW: Code sehr langsam trotz(ohne select)
15.09.2009 13:19:54
fcs
Hallo Chris,
da hatte ich mich bei der Deklataion der Variablen vertan, Worksheet statt Range
Gruß
Franz
Sub start2()
Dim rngSuch As Range
Dim c As Range, x As Long
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Set rngSuch = Workbooks("vorab.xls").Worksheets("Final").Range("CI13:CI" & Rows.Count)
With ThisWorkbook.Worksheets("Tabelle1")
For x = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set c = rngSuch.Find(what:=UCase(.Cells(x, 1)), LookIn:=xlValues, lookat:=xlWhole)
'        Set c = rngSuch.Find(what:=UCase(.Cells(x, 1)), LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
MsgBox c.Row
End If
Next
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Code sehr langsam trotz(ohne select)
16.09.2009 07:30:54
chris
Danke Franz !!!
AW: Code sehr langsam trotz(ohne select)
15.09.2009 09:43:44
Tino
Hallo,
versuchen kannst Du es mal hiermit, ob er bei Dir schneller ist kann ich nicht versprechen.
Sub start()
Dim X As Long
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
With ThisWorkbook.Worksheets("Tabelle1")
For X = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
suchen_einfuegen (UCase(.Cells(X, 1)))
Next
End With
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Sub suchen_einfuegen(sbegriff)
Dim varRow
With Workbooks("vorab.xls").Worksheets("Final") 'Workbooks("vorab.xls").
With .Range("CI13:CI" & .Cells.SpecialCells(xlCellTypeLastCell).Row)
varRow = Application.Match(sbegriff, .Cells, 0)
If IsNumeric(varRow) Then
MsgBox .Cells(1, 1).Row + varRow - 1
End If
End With
End With
End Sub
Gruß Tino
Anzeige
AW: Code sehr langsam trotz(ohne select)
15.09.2009 10:53:17
chris
Hallo Tino,
verstehe deinen code zwar noch nicht ganz aber läuft super schnell!
Danke !
AW: Code sehr langsam trotz(ohne select)
15.09.2009 11:39:53
chris
Tino noch eine frage habe ich dazu.
Macht das einen Unterschied ob ich so schreibe wie du:
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
und am ende
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
oder ob ich so schreibe:
Application.ScreenUpdating = False
Application.EnableEvents = False
und am Ende
Application.ScreenUpdating = true
Application.EnableEvents = true
Danke noch einmal für Deinen Code !
Anzeige
irgendwo habe ich mal gelesen
15.09.2009 12:14:37
Tino
Hallo,
, dass die Verarbeitung mit With schneller geht,
kann ich Dir aber nicht bestätigen, merkt man wohl kaum.
Aber auf alle Fälle spart es Schreiberei. ;-)
Gruß Tino
AW: Code sehr langsam trotz(ohne select)
15.09.2009 09:50:04
Rudi
Hallo,
teste mal so:
Sub suchen_einfuegen(sBegriff)
Dim c
With Workbooks("vorab.xls").Worksheets("Final")
c = Application.Match(sBegriff, .Columns(87), 0)
If Not IsError(c) Then
MsgBox c
End If
End With
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige