Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
944to948
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
944to948
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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


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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige