VBA-Code-Optimierung

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: VBA-Code-Optimierung
von: Herman
Geschrieben am: 20.07.2015 14:39:10

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!

Bild

Betrifft: AW: VBA-Code-Optimierung
von: Rudi Maintaire
Geschrieben am: 20.07.2015 16:56:58
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

Bild

Betrifft: AW: VBA-Code-Optimierung
von: Nepumuk
Geschrieben am: 20.07.2015 18:02:09
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

Bild

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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zielwertsuche mit VBA - dauert zu lange"