Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
908to912
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
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro "schläft" ein

Makro "schläft" ein
18.09.2007 10:51:00
Ben
Hi,
Ich habe ein sehr rechenintensives Makro am Laufen mit dem ich mehrere Dateien abarbeiten muss, die jeweils an die 65000 Zeilen haben. Das Makro funktioniert an sich ganz wunderbar, das Problem ist nur, dass ich das Ganze über Nacht laufen lassen muss. Wenn ich morgens zum PC komme, dann wirkt das Makro wie eingeschlafen, er ist nicht zur nächsten abzuarbeitenden Datei gesprungen. Sobald ich die Maus aber ein bißchen bewege rechnet er weiter. Ich habe eigentlihc keine Energiesparoptionen eingestellt. Mein Makro hat für die Visuailiserung eines Statusbalken DoEvents mit drin, kann das Probleme machen? Mit mehreren kleineren Dateien läuft es einwandfrei durch, und wie gesagt, es läuft ja auch weiter sobald ich am PC ein paar Tasten drücke. Weiß jnd was da los ist?
Vielen Dank

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro "schläft" ein
18.09.2007 11:37:00
Gerd
Hallo Ben,
wie sieht das Makro aus ?
Gruß Gerd

AW: Makro "schläft" ein
18.09.2007 11:49:11
Ben
Das Makro ist etwas umfassender, hab das ganze mal hochgeladen.
Sub AllFiles() wird gestartet und damit wird alles wichtige ausgeführt (ist im Modul 3). Da ich ein relativer VB Neuling bin und das meiste Wissen während der Erstellung gesammelt wurde, ist das Ganze leider etwas unübersichtlich. Aber wie gesagt, es funktioniert ja eigentlich.
https://www.herber.de/bbs/user/46132.xls
Enthält allen Code, wie gesagt, AllFiles startet den Prozess
https://www.herber.de/bbs/user/46133.xls
Testdatei zur Bearbeitung (die richtigen dateien sehen genauso aus, haben bloß ca 65000 Zeilen)

Anzeige
AW: Makro "schläft" ein
18.09.2007 11:49:00
fcs
Hallo Ben,
dir mal die Excel-VBA-Hilfe-Information zu DoEvents an.
Wahrscheinlich sind die DoEvents das Problem. Da du nachts ja eh nicht auf die Fortschrittsanzeige angewiesen bist ;) dürfte es ja kein Problem sein sie wegzulassen.
Evtl. reicht ja schon eine MsgBox zu Beginn der Prozeduren mit der du die Events bei Bedarf deaktivierst

If MsgBox("Events währende der Makroausführung deaktivieren?", _
vbQuestion + vbYesNo) = vbYes Then
Application.EnableEvents = False
Else
Application.EnableEvents = True
End If


In der letzten Zeile deines Codes setzt du dann EnableEvents wieder auf True
Gruß
Franz

Anzeige
AW: Makro "schläft" ein
18.09.2007 12:07:37
Ben
Hi Franz,
meine Statusanzeigen werden immer noch aktualisiert, vielleicht heben die aufgerufenen Funktionen das wieder auf. Werde nochmal meinen Code durchwühlen, gerade weil das Makro einschläft ist eine Statusanzeige natürlich wichtig (vor allem bei sehr vielen Dateien). Vielleicht probier ich es mal mit einer kurzen Doevents Schleife und ohne Fortschrittsbalken, um zumind. ab und zu einen Status auszugeben. Leider kann ich es nur schwer testen, weil bei kurzer Laufzeit alles wunderbar funktioniert.

AW: Makro "schläft" ein
18.09.2007 13:48:00
Rudi
Hallo,
warum nimmst du für die Statusanzeige nicht einfach die Statusleiste?
Nicht so gut zu sehen aber der Aufwand ist geringer.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Makro "schläft" ein
18.09.2007 14:36:00
fcs
Hallo Ben,
ich hab mir deine Prozeduren mal angsehen.
Dabei ist mir aufgefallen, dass du beim Löschen der Leerzeilen extrem viel Rechenleistung nur in die Aktualisierung der Fortschrittsanzeige im Userform1 investierts. Wenn du tatsächlich Datenfiles mit mehr als 10000 Datenzeilen verarbeitest, dann reicht es aus, wenn du alle 100 Zeilen die Anzeige aktualisierst.
Dazu muss du die Prozedur Leerzeilen ein wenig anpassen, indem du den Aufruf der Aktualisierung in eine kleine If-Bedingung packst.
Reicht es nicht aus, wenn du den Fortschritt in der Statuszeile anzeigst? Das dürfte den gesamten Ablauf erheblich beschleunigen.
Ein weiteres Problem in dieser Prozedur, du sammelst alle Leezeilen, die ggf. in mehren tausend Zeilen vorkommen können per Union in einem Range-Objekt. Das kann irgendwann zu einem Problem werden, da die Zeilen in einer entsprechenden Variablen gespeichert werden müssen. Ich schlage vor, hier die Zeilen in der Tabelle die Zeilen von der letzten Zeile zur Zeile 1 zu prüfen und in regelmäßigen Abstanden die gemerkten Leerzeilen zu löschen.
Ich hab die Prozedur mal entsprechend meinen obigen Anmerkungen angepasst und die Aufrufe der Fortschrittsanzeige zu Kommentaren gemacht.
Gruß
Franz

Sub Leerzeilen_loeschen()
'   alle Leerzeilen löschen (aus Inet kopiert)
Dim LoI As Long, LoJ As Long, IntI As Integer
Dim RaZeile As Range
Dim PctDone As Single
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
LoJ = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
IntI = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For LoI = LoJ To 1 Step -1
If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = IntI Then
If RaZeile Is Nothing Then
Set RaZeile = Rows(LoI)
Else
Set RaZeile = Union(RaZeile, Rows(LoI))
End If
End If
'ca. alle 100 Zeilen werden gemerkte Leezeilen gelöscht und Fortschritt aktualisiert
If LoI Mod 100 = 0 Then
If Not RaZeile Is Nothing Then
RaZeile.Delete
Set RaZeile = Nothing
' Prozentzahl updaten
PctDone = (LoJ - LoI) / LoJ
'Counter / (RowMax * ColMax)
Application.StatusBar = "Datei: " & ActiveWorkbook.Name & "  Prozent geschafft: " _
& Format(PctDone, "00.0%")
' Call subroutine die den Fortschrittsbalken aktualisiert
'          UpdateProgressBar PctDone
End If
End If
Next LoI
If Not RaZeile Is Nothing Then
RaZeile.Delete
Set RaZeile = Nothing
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.StatusBar = False
'    Unload UserForm1
End Sub


Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige