Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1312to1316
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 dauert sehr lange !

Code dauert sehr lange !
09.05.2013 16:38:25
rieckmann
Hallo,
ich habe auf der Arbeit nur ein altes Notebook mit Office XP.
Nun habe ich eine Mappe die beim Öffnen das Makro startet.
Es soll bestimmte Spalten in mehreren Tabellenblätter durchlaufen um Leerzeichen einzufügen.
Das Makro wurde hier im Forum erstellt.
Ich habe es lediglich für eine weitere Spalte erweitert.
Nun ist es aber so dass es eine gefühlte Ewigkeit dauert bis es abgearbeitet ist.
Könnt ihr mal schauen ob man es vekürzen oder abändern kann damit es auf dem alten Rechner schneller durchläuft ?
Hier der Code:
Private Sub Workbook_Open()
Dim wks As Worksheet
Dim rngC As Range
Application.ScreenUpdating = False
For Each wks In Worksheets
With wks
For Each rngC In .Range(.Cells(2, 10), .Cells(Rows.Count, 10).End(xlUp))
rngC = Replace(Replace(rngC, " ", ""), ".", ". ")
Next
End With
Next
For Each wks In Worksheets
With wks
For Each rngC In .Range(.Cells(2, 8), .Cells(Rows.Count, 10).End(xlUp))
rngC = Replace(Replace(rngC, " ", ""), ".", ". ")
Next
End With
Next
End Sub

Gruß
Fred

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code dauert sehr lange !
09.05.2013 16:44:22
Oberschlumpf
Hi Fred
Schreib nur diesen Code rein, also nur eine wks-Schleife:
  For Each wks In Worksheets
With wks
For Each rngC In .Range(.Cells(2, 10), .Cells(Rows.Count, 10).End(xlUp))
rngC = Replace(Replace(rngC, " ", ""), ".", ". ")
Next
For Each rngC In .Range(.Cells(2, 8), .Cells(Rows.Count, 10).End(xlUp))
rngC = Replace(Replace(rngC, " ", ""), ".", ". ")
Next
End With
Next

Hilfts?
Ciao
Thorsten

AW: Code dauert sehr lange !
09.05.2013 17:35:32
rieckmann
Hallo Thorsten,
ich danke dir.
Ich werde es nächste Woche bei der Arbeit ausprobieren.
Schönen Vatertag noch
Gruß
Fred

Anzeige
AW: Code dauert sehr lange !
09.05.2013 20:11:14
JoWE
Hallo Fred,
schon mal so versucht?
Sub test()
Dim wks As Worksheet
Dim r1 As Range
Dim r2 As Range
Set wks = ActiveSheet
With wks
Set r1 = .Range("J2:J" & .Cells(Rows.Count, 10).End(xlUp).Row)
r1.Replace What:=" ", Replacement:=""
r1.Replace What:=".", Replacement:=". "
Set r2 = .Range("H2:H" & .Cells(Rows.Count, 8).End(xlUp).Row)
r1.Replace What:=" ", Replacement:=""
r1.Replace What:=".", Replacement:=". "
End With
Set r1 = Nothing
Set r2 = Nothing
Set wks = Nothing
End Sub
Gruß
Jochen

AW: Code dauert sehr lange !
09.05.2013 21:05:43
rieckmann
Hallo Jochen,
auch das werde ich nächste Woche ausprobieren wenn ich bei der Arbeit bin.
Mal sehen welcher Code schneller ist !
Danke dir für die Hilfe
Gruß
Fred

Anzeige
AW: Code dauert sehr lange ! Makrobremsen
10.05.2013 08:34:24
fcs
Hallo Fred,
beachte bitte, dass die Bildschirm-Aktualisierung nur eines von mehreren Elementen ist, die die Ausführung von Makros ausbremsen.
Kritisch sind auch der Berechnungsmodus für Formeln (Automatisch / Manuel) und Ereignismakros in deinem Fall ggf. das Worksheet_Change-Ereignismakro.
In Arbeitsmappen mit umfangreichem Formelwerk oder auch komplexen Marix und Vereisformeln sollte der Berechnungsmodus vorübergehend auf Manuel gesetzt werden.
Sind in den Tabellen Ereignismakros-Integriert, dann sollten diese temporär deaktiviert werden.
Gruß
Franz
Sub MakroTest()
Dim StatusCalc
'Makrobremsen lösen - Am beginn eine sMakros
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation 'Aktuellen Berechnungsmodus merken
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
' Hauptprozedur
Beenden: 'Sprungadresse zum Beenden diese Makros - nicht mit Exit Sub arbeiten!!
'Makrobremsen zurücksetzen - vor dem Beenden eines Makros
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub

Anzeige
AW: Code dauert sehr lange ! Makrobremsen
10.05.2013 08:41:01
rieckmann
Hallo Franz,
tolle Erklärung.
Das werde ich mir abspeichern und ausprobieren.
Danke und Gruß
Fred

AW: Code dauert sehr lange ! Makrobremsen
10.05.2013 09:28:58
Klaus
Hi Fred,
die Idee von Franz ist so gut, dass man sie häufiger einsetzen will. Das geht sehr komfortabel. Hier im Forum ist mal diese Sub rumgegangen (ich weiss leider nicht mehr, von wem die ursprünglich stammt!)

Public Static Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Dim intCalculation As Integer
If Modus = True Then intCalculation = Application.Calculation
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.Calculation = IIf(Modus = True, xlManual, intCalculation)
.Cursor = IIf(Modus = True, 2, -4143)
End With
End Sub

Den ganzen Code in ein leeres Modul, dann rechtsclick auf das Modul und "exportieren". So wird das Modul als *.bas gespeichert.
Bei deinem nächsten Projekt, bei dem du das brauchst, einfach das vorhandene Modul wieder importieren und folgendermaßen benutzen:
Sub MakroOhneBremse()
On Error GoTo beenden
GetMoreSpeed (True)
[aufwendiger, rechenintensiver Code]
beenden:
GetMoreSpeed (False)
End Sub
Dadurch sparst du dir das dutzendfache abtippen der Prozedur, wenn du sie in mehr als einem Makro / Projekt gleichzeitig benutzen willst.
Grüße,
Klaus M.vdT.

Anzeige
AW: Code dauert sehr lange ! Makrobremsen
10.05.2013 10:30:31
rieckmann
Hallo Klaus,
super Idee.
Danke dir

53 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige