Anzeige
Archiv - Navigation
608to612
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
608to612
608to612
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dauer des Programmablaufs

Dauer des Programmablaufs
10.05.2005 07:16:04
Ceci
Guten Morgen zusammen,
ich habe ein kleines Problem.
Und zwar: Wie kann ich herausfinden wie lange mein Programm braucht für einen Durchlauf? Gibt es überhaupt eine Möglichkeit?
Fest steht dass ca. 100000 Zeilen in Excel durchlaufen werden müssen, teils mehrfach.
Und noch eine Frage. Kann man einen Programmdurchlauf beschleunigen?
Vielen Dank vorab,
Gruß aus dem regnerischen Schwarzwald,
Cäcilia

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:23:26
Hajo_Zi
Hallo Cäcilia,
Option Explicit

Sub Test()
Dim DaWert As Date
Dim LoI As Long
Dim LoJ As Long
DaWert = Time
For LoI = 1 To 2
LoJ = LoJ + 1
Application.Wait Now + TimeSerial(0, 0, 2)
Next LoI
MsgBox CDate(Time - DaWert)
End Sub

verzichte auf select usw.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem Windows 2000 SP4 und Excel Version 2000 SP3.



"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:30:37
Ceci
Vielen Dank Hajo,
aber eine Frage hab ich noch: Ich habe 15 verschiedene Module und in jedem Modul ca. 5 Prozeduren. Wo schreibe ich dann deine Prozedur hin?
Es gibt einen Button "Berechnen" unter dem alle Prozeduren aufgerufen werden...
Gruß Katja
AW: Dauer des Programmablaufs, Doppelt oT
10.05.2005 07:33:19
Hajo_Zi
AW: Dauer des Programmablaufs
10.05.2005 07:31:01
Ceci
Vielen Dank Hajo,
aber eine Frage hab ich noch: Ich habe 15 verschiedene Module und in jedem Modul ca. 5 Prozeduren. Wo schreibe ich dann deine Prozedur hin?
Es gibt einen Button "Berechnen" unter dem alle Prozeduren aufgerufen werden...
Gruß Cäcilia
AW: Dauer des Programmablaufs
10.05.2005 07:34:01
Hajo_Zi
Hallo Cäcilia,
unter Deinem Button Berechnen.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:35:10
P@ulchen
Hallo Ceci,
den Code von Hajo kannst Du so nicht verwenden, da er nur die Zeit anzeigt, die er selber für einen Durchlauf benötigt.
Schreib so:


Option Explicit
Sub Test()
Dim Startwert As Date
Dim Endwert As Date
Startwert = Time
'Hier Dein Startmakro
Endwert = Time
MsgBox CDate(Endwert - Startwert)
End Sub


Gruß aus Leipzig
P@ulchen
Das Forum lebt auch von den Rückmeldungen !
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:38:02
Hajo_Zi
Hallo P@ulchen
"den Code von Hajo kannst Du so nicht verwenden, da er nur die Zeit anzeigt, die er selber für einen Durchlauf benötigt."
die Aussage würde ich bezweifeln. Du vergeudest nur noch eine Variable.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:49:24
P@ulchen
Hallo Hajo,
"aber eine Frage hab ich noch: Ich habe 15 verschiedene Module und in jedem Modul ca. 5 Prozeduren. Wo schreibe ich dann deine Prozedur hin?
Es gibt einen Button "Berechnen" unter dem alle Prozeduren aufgerufen werden..."
Deine Antwort: "unter Deinem Button Berechnen."
Stellt sich für mich so dar:

Sub Berechnen()
Dim DaWert As Date
Dim LoI As Long
Dim LoJ As Long
DaWert = Time
For LoI = 1 To 2
LoJ = LoJ + 1
Application.Wait Now + TimeSerial(0, 0, 2)
Next LoI
MsgBox CDate(Time - DaWert)
Makro1
Makro2
Makroletzte
End Sub

?
Gruß aus Leipzig
P@ulchen
Das Forum lebt auch von den Rückmeldungen !
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:52:12
Hajo_Zi
Hallo P@ulchen,
ich habe die 5 Makro nicht gesehen, falls Du Sie gesehen hast bist Du besser dran.
Bei VBa Gut gehe ich davon aus das Sie sieht das der Code aus zwei Teile besteht. Der Anfang muß zu Beginn und Ende vor End Sub. Ich vermute mal da habe ich nicht zuviel verlangt.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:44:58
Ceci
Hallo,
leider weiß ich noch immer nicht wo ich das ganze hinschreiben soll.
schreibe ich es an den anfang von Button Berechnen, erscheint die Zeit 0:00, was auch logisch ist, da nichts dazwischen steht.
Schreibe ich das Makro an den Schluss, wird mir zwar eine Zeit angezeigt, aber ich will doch am Anfang wissen, wie lange mein Programm brauchen wird für den Durchlauf?!
Dankeschön vorab,
Cäcilia
AW: Dauer des Programmablaufs
10.05.2005 07:47:37
P@ulchen
Hallo Ceci,
hast Du mal meinen Vorschlag probiert ?
Gruß aus Leipzig
P@ulchen
Das Forum lebt auch von den Rückmeldungen !
Anzeige
AW: Dauer des Programmablaufs
10.05.2005 07:49:33
Hajo_Zi
Hallo Cäcilia,
ich vermute mal Dú hast es falsch umgesetzt. Aber ich kann Deinen Code nicht sehen.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
Werner, Hajo, Paulchen
10.05.2005 08:18:54
Ceci
Hallo zusammen,
Sorry, hat etwas länger gedauert,ich habe alle 3 Codes mal getestet.
Die durchlaufzeit ist abhängig von der Anzahl der Zeilen, die durchlaufen werden müssen.
Obwohl ich die Datenmenge drastisch erhöht habe, zeigen alle 3 MsgBoxen noch die gleichen Werte an, obwohl die Durchlaufzeit offensichtlich angestiegen ist.
Der Programmdurchlauf benötigt wenn ich die Zeit stoppe 12s.
Die MsgBox von Hajo zeigt immer 4s an.
Die MsgBox von Paulchen und Werner immer 0:00s.
Mein Code sieht folgendermaßen aus:

Private Sub CB_neue_Daten_Click()
'Code 1
Dim DaWert As Date
Dim LoI As Long
Dim LoJ As Long
DaWert = Time
For LoI = 1 To 2
LoJ = LoJ + 1
Application.Wait Now + TimeSerial(0, 0, 2)
Next LoI
MsgBox CDate(Time - DaWert)
'Code 2
Dim DatAnfang As Date
DatAnfang = Now
'hier Dein Code
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit"
'Code 3
Dim Startwert As Date
Dim Endwert As Date
Startwert = Time
'Hier Dein Startmakro
Endwert = Time
MsgBox CDate(Endwert - Startwert)
'Aufruf aus Modul Prozedur_Filter_der_Daten
Call filtern
'Aufruf aus Modul Prozedur_ZaBe_Einlesen
Call ZaBe_Einlesen
'Aufruf aus Modul Prozedur_Preis_Einlesen
Call BewHerangezPreis_Bestimmen
Call Abweichung_bestimmen
Call Einzelnoten
Call GesNote_je_Lieferant
Call GewichtNote_je_Lieferant
Call Schreiben_PreisNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Mengen_Einlesen
Call Abweichung_berechnen
Call Note_Abweich_Menge
Call Gesamtnote_Lieferant4
Call Gesamtnote_gewichtet_Lieferant4
Call Schreiben_MengenNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Angebot einlesen
Call Differenz_Werktage
Call Note_Ang_Position
Call GesamtNote_Ang_Lieferant
Call Gewichtete_Noten_Angebot
Call Schreiben_AngebotNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Rueckliefquote_einlesen
Call Abweich_Ruecklief_berechnen
Call Note_Abweich_zuordnen
Call Gew_Note_Rueck_ermitteln
Call Noten_einlesen_Gesamt
'Aufruf aus Modul Prozedur_Gesamt_einlesen
Call Summe_Gew_Noten
Call Lieferantenklasse
'Aufruf aus Modul Prozedur_AnzAB_einlesen
Call EinzelnoteAB_Bestimmen
Call GesNote_je_Lieferant_ABs
Call Gewichtete_Noten_ABs
Call Schreiben_ABNoten_in_Gesamt
End Sub

Anzeige
AW: Werner, Hajo, Paulchen
10.05.2005 08:22:28
Hajo_Zi
Hallo Cäcilia
bei VBA Gut bin ich von mehr wissen ausgegangen.
Option Explicit

Private Sub CB_neue_Daten_Click()
'Code 1
Dim DaWert As Date
DaWert = Time
'Aufruf aus Modul Prozedur_Filter_der_Daten
Call filtern
'Aufruf aus Modul Prozedur_ZaBe_Einlesen
Call ZaBe_Einlesen
'Aufruf aus Modul Prozedur_Preis_Einlesen
Call BewHerangezPreis_Bestimmen
Call Abweichung_bestimmen
Call Einzelnoten
Call GesNote_je_Lieferant
Call GewichtNote_je_Lieferant
Call Schreiben_PreisNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Mengen_Einlesen
Call Abweichung_berechnen
Call Note_Abweich_Menge
Call Gesamtnote_Lieferant4
Call Gesamtnote_gewichtet_Lieferant4
Call Schreiben_MengenNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Angebot einlesen
Call Differenz_Werktage
Call Note_Ang_Position
Call GesamtNote_Ang_Lieferant
Call Gewichtete_Noten_Angebot
Call Schreiben_AngebotNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Rueckliefquote_einlesen
Call Abweich_Ruecklief_berechnen
Call Note_Abweich_zuordnen
Call Gew_Note_Rueck_ermitteln
Call Noten_einlesen_Gesamt
'Aufruf aus Modul Prozedur_Gesamt_einlesen
Call Summe_Gew_Noten
Call Lieferantenklasse
'Aufruf aus Modul Prozedur_AnzAB_einlesen
Call EinzelnoteAB_Bestimmen
Call GesNote_je_Lieferant_ABs
Call Gewichtete_Noten_ABs
Call Schreiben_ABNoten_in_Gesamt
MsgBox CDate(Time - DaWert)
End Sub

Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
AW: Werner, Hajo, Paulchen
10.05.2005 08:25:51
P@ulchen
Hallo Ceci,


Option Explicit
Private Sub CB_neue_Daten_Click()
Dim Startwert As Date
Dim Endwert As Date
Startwert = Time
'Aufruf aus Modul Prozedur_Filter_der_Daten
Call filtern
'Aufruf aus Modul Prozedur_ZaBe_Einlesen
Call ZaBe_Einlesen
'Aufruf aus Modul Prozedur_Preis_Einlesen
Call BewHerangezPreis_Bestimmen
Call Abweichung_bestimmen
Call Einzelnoten
Call GesNote_je_Lieferant
Call GewichtNote_je_Lieferant
Call Schreiben_PreisNoten_in_Gesamt
'Aufruf aus Modul Prozedur_Mengen_Einlesen
 Call Abweichung_berechnen
 Call Note_Abweich_Menge
 Call Gesamtnote_Lieferant4
 Call Gesamtnote_gewichtet_Lieferant4
 Call Schreiben_MengenNoten_in_Gesamt
                    
'Aufruf aus Modul Prozedur_Angebot einlesen
Call Differenz_Werktage
Call Note_Ang_Position
Call GesamtNote_Ang_Lieferant
Call Gewichtete_Noten_Angebot
Call Schreiben_AngebotNoten_in_Gesamt
                    
'Aufruf aus Modul Prozedur_Rueckliefquote_einlesen
Call Abweich_Ruecklief_berechnen
Call Note_Abweich_zuordnen
Call Gew_Note_Rueck_ermitteln
Call Noten_einlesen_Gesamt
                    
'Aufruf aus Modul Prozedur_Gesamt_einlesen
Call Summe_Gew_Noten
Call Lieferantenklasse
                    
'Aufruf aus Modul Prozedur_AnzAB_einlesen
Call EinzelnoteAB_Bestimmen
Call GesNote_je_Lieferant_ABs
Call Gewichtete_Noten_ABs
Call Schreiben_ABNoten_in_Gesamt
Endwert = Time
MsgBox CDate(Endwert - Startwert)
End Sub


Gruß aus Leipzig
P@ulchen
Das Forum lebt auch von den Rückmeldungen !
AW: Werner, Hajo, Paulchen
10.05.2005 08:32:40
Ceci
Hallo,
Sorry Hajo, die Sachen, die ich bisher gebraucht habe beherrsche ich gut :-).
Jetzt funktioniert die anzeige zwar, jedoch wird mit am ende angezeigt wielange der Durchlauf gebraucht hat, sehe ich das richtig?
Ich hätte gerne eine MsgBox die vor dem Durchlauf die Zeit angibt, damit ich sehe wie lange der PC ungefähr außer Gefecht ist.
Deshalb anfangs meine Frage, ob das überhaupt geht.
mfg Cäcilia
AW: Werner, Hajo, Paulchen
10.05.2005 08:35:22
Hajo_Zi
Hallo
kopiere die Zeile
MsgBox CDate(Time - DaWert)
an die entsprechende Stelle.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
AW: Werner, Hajo, Paulchen
10.05.2005 08:47:10
P@ulchen
Hallo Hajo,
was soll denn dieser Vorschlag ?
Woher soll die MsgBox wissen, wie lange der nachfolgende Code zum Durchlauf benötigt ?
Aber wahrscheinlich liegt es mal wieder an Cäcilia, da sie ihre Frage nicht so stellt, daß Du sie richtig verstehst...
@Ceci: Nein, Du kannst die genaue Zeit, die ein nachfolgender Code für den Durchlauf benötigt, nicht vorher ermitteln.
Eventuell wäre eine Hochrechnung möglich, in dem Du einmalig die Zeit, die für einen gesamten Durchlauf benötigt wird, durch die Anzahl der Zeilen teilst und so die ungefähre Zeit pro Zeile ermittelst. Dann könntest Du bei Start des Makros die Anzahl der zu bearbeitenden Zeilen ermitteln und diese mit dieser Durchschnittszeit multiplizieren.
Gruß aus Leipzig
P@ulchen
Das Forum lebt auch von den Rückmeldungen !
AW: Werner, Hajo, Paulchen
10.05.2005 10:10:20
Ceci
Danke Paulchen,
hab schon gedacht ich bin doof, dass das doch gar nicht möglich ist.
Trotzdem dankeschön euch allen...
Mittlerweile sonnige Grüße aus dem Schwarzwald,
Cäcilia
AW: Dauer des Programmablaufs
10.05.2005 07:33:22
WernerB.
Hallo Cäcilia,
Zu 1.:

Sub MakroLaufZeit()
Dim DatAnfang As Date
DatAnfang = Now
'hier Dein Code
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit"
End Sub

Zu 2.:
Durch die Aneignung und konsequente Einhaltung eines darauf ausgerichteten Programmierstils, wie z.B. durch die Verwendung von "Application.Screenupdating = False/True" und die Vermeidung (wenn möglich) von "Select" und "Activate".
Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige