Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1436to1440
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

VBA-Code-Optimierung

VBA-Code-Optimierung
20.07.2015 14:39:10
Herman
Hallo,
ich habe folgenden VBA-Code, der nach einer gewissen Zeit, Excel entweder stark verlangsamt oder zum Absturz bringt (>24h Laufzeit). Ich glaube es liegt daran, dass Excel mit "Application.Ontime"-Anweisungen vollläuft. Meiner Ansicht nach, müsste ich einfach nur, wenn die entsprechende Uhrzeit nicht eingetreten ist, On.Time für DIESE Uhrzeit stoppen, über schedule:=false bekomme ich dies aber nicht wirklich hin. Hier aber zunächst mein Code. Möglicherweise sind auch grundlegende Denkfehler enthalten.
Option Explicit
Public stunde As Integer
Public minute As Integer
Sub Workbook_Open()
If MsgBox("Daten updaten?", vbOKCancel, "Update") = vbOK Then
Application.Run "oeffnen"
Public Sub oeffnen()
Dim i As Integer
Dim x As Integer
stunde = 0
minute = 10
For i = 0 To 150
Application.OnTime TimeSerial(stunde, minute, 0), "HoleDaten" ', TimeSerial(stunde, minute, 31)
minute = minute + 10
If minute = 60 Then
minute = 0
stunde = stunde + 1
End If
If stunde = 24 And minute = 0 Then
GoTo Caller
End If
If stunde = 23 And minute = 60 Then
GoTo Caller
End If
Next i
Caller:
Call schleife
End Sub
Sub Makr()
Nicht-relevanter-Code
Application.OnTime Now + TimeSerial(0, 9, 0), "oeffnen"
End Sub

Public Sub schleife()
Application.OnTime Now + TimeSerial(0, 0, 30), "oeffnen"
End Sub

Kurz zusammengefasst: Das Makro "HoleDaten" soll immer nur zur vollen zehntem Minute einer Stunde ausgeführt werden (also 0, 10, 20, 30, 40, 50).
Wenn "die Zeit nicht gekommen ist" soll die Überprüfung solange wiederholt werden (Sub schleife), bis die Zeit "gekommen ist".
Dann wird der eigentliche Code in HoleDaten ausgeführt, HoleDaten öffnet nach dessen Ausführung noch ein weiteres Makro "Sub Makr", welches unter anderem einen Datenexport anstößt und die Zeitüberprüfung nach 9 Minuten wieder auslöst.
Wie kann ich die ganze Thematik "Führe ein Makro nur zur vollen 10. Minute einer Stunde aus" besser gestalten? Wo liegen Anfängerfehler?
Danke für den Rat!

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

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code-Optimierung
20.07.2015 16:56:58
Rudi
Hallo,
Möglicherweise sind auch grundlegende Denkfehler enthalten.
Nicht möglicherweise, offensichtlich.
Weißt du überhaupt was du tust?
Lies mal aufmerksam die Hilfe zu OnTime
Gruß
Rudi

AW: VBA-Code-Optimierung
20.07.2015 18:02:09
Nepumuk
Hallo,
hier mal ein Beispiel wie eine Prozedur immer zur vollen 10. Minute aufgerufen wird.
Option Explicit

Public Sub Test1()
    Call Application.OnTime(EarliestTime:=Date + TimeSerial(Hour(Time), _
        (Minute(Time) \ 10) * 10 + 10, 0), Procedure:="Test2", Schedule:=True)
    
End Sub

Public Sub Test2()
    Static lngRow As Long
    lngRow = lngRow + 1
    Cells(lngRow, 1).Value = Time
    Call Test1
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA-Code-Optimierung
21.07.2015 07:23:01
Herman
Vielen Dank!
Tut genau dass, was es soll :).

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige