Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Langsames Makro

Forumthread: Langsames Makro

Langsames Makro
23.01.2008 16:58:00
Steve
Hallo!
Ich habe ein Makro, welches aus einer Excel-Datei mit 365 Registerblättern Daten exportiert. Pro Registerblatt sind 96 Zeilen zu bearbeiten.
Dafür habe ich zwei Schleifen, welche die Werte aus den Registern übernehmen und in ein Exportregister übertragen. Danach wird exportiert.
Ich habe schon einige Exportdateien (die sind in 10min fertig), aber hier braucht Excel bei CPU-Volllast >5 Stunden, um die 365 Dateien zu erstellen. Also muß irgendwo in der Schleife die Bremse liegen.
Irgendeine Idee warum das so langsam läuft?
---------------

Private Sub CommandButton2_Click()
Dim i&, j&
Pfad_Export = ActiveSheet.Cells(11, 3)
'Dateiwechselanzeige unterbinden
Application.ScreenUpdating = False
For i = 1 To 365 'jeden Tag
For j = 1 To 96 'jedes Zeitintervall
ThisWorkbook.Sheets("Summe").Cells(j, 1) = ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 9) +  _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 11) + _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 12) + _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 13) + _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 15) + _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 16, 16) + _
_
ThisWorkbook.Sheets("" & i & "").Cells(j + 128, 7)
ThisWorkbook.Sheets("Summe").Cells(j + 96, 1) = ThisWorkbook.Sheets("" & i & "").Cells(j + 16,  _
14)
Next j
'r_ga_val-Register in neue Exceldatei öffnen
ThisWorkbook.Sheets("r_ga_val").Copy
'Datei exportieren in PRN Format
ActiveWorkbook.Sheets(1).SaveAs Filename:= _
Pfad_Export & i & ".dat", FileFormat:= _
xlTextPrinter, CreateBackup:=False
Application.DisplayAlerts = False
ActiveWorkbook.Close 'Datei schließen
Application.DisplayAlerts = True
Next i
Application.ScreenUpdating = True
End Sub


Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Langsames Makro
23.01.2008 17:42:23
Original
Hi,
probier mal:

Private Sub CommandButton2_Click()
Dim i&, j&
Dim oldState As Long
Dim Pfad_Export As String
Pfad_Export = ActiveSheet.Cells(11, 3)
'Dateiwechselanzeige unterbinden
With Application
.ScreenUpdating = False
.EnableEvents = False
oldState = .Calculation
.Calculation = -4135
End With
On Error GoTo ErrCatch
For i = 1 To 365 'jeden Tag
For j = 1 To 96 'jedes Zeitintervall
With ThisWorkbook
.Sheets("Summe").Cells(j, 1) = .Sheets("" & i & "").Cells(j & 16, 9) & _
.Sheets("" & i & "").Cells(j & 16, 11) & _
.Sheets("" & i & "").Cells(j & 16, 12) & _
.Sheets("" & i & "").Cells(j & 16, 13) & _
.Sheets("" & i & "").Cells(j & 16, 15) & _
.Sheets("" & i & "").Cells(j & 16, 16) & _
.Sheets("" & i & "").Cells(j & 128, 7)
.Sheets("Summe").Cells(j & 96, 1) = .Sheets("" & i & "").Cells(j & 16, 14)
End With
Next j
'r_ga_val-Register in neue Exceldatei öffnen
ThisWorkbook.Sheets("r_ga_val").Copy
'Datei exportieren in PRN Format
ActiveWorkbook.Sheets(1).SaveAs Filename:= _
Pfad_Export & i & ".dat", FileFormat:= _
xlTextPrinter, CreateBackup:=False
Application.DisplayAlerts = False
ActiveWorkbook.Close 'Datei schließen
Application.DisplayAlerts = True
Next i
ErrCatch:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = oldState
End With
End Sub


mfg Kurt

Anzeige
AW: Langsames Makro
24.01.2008 09:17:30
Steve
Hallo Kurt!
Ich habe Dein Makro übernommen, aber das lief nicht.
Habe dann meinen Teil zwischen "For i = 1 To 365 'jeden Tag" und "Next j" genommen und dann geht es - und auch schnell. Danke!
Kannst Du mir vielleicht noch erklären woran es lag?
Steve

AW: Langsames Makro
24.01.2008 09:54:00
Original
Hi,
konnte den Code natürlich nicht testen, Hauptsache jetzt läuft es.
Hiermit werden die Berechnung auf manuell geschaltet . Die Events werden ausgeschaltet. Falls
dein Code irgenwo eine Berechnung oder ein Ereignismakro auslöst, wird das für die
Dauer der Codeausführung unterdrückt, das bringt Speed.
With Application
.ScreenUpdating = False
.EnableEvents = False
oldState = .Calculation
.Calculation = -4135
End With
On Error GoTo ErrCatch
''Dein Code
Hiermit wird alles wieder auf den Zustand vor Codeausführung zurückgesetzt.
ErrCatch:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = oldState
End With
mfg Kurt
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