Ich habe ein Makro, das einige Informationen aus dem Internet herunterlädt und ich muss es zu einem bestimmten Zeitpunkt des Tages automatisch ablaufen und laufen beide in festgelegten Zeitintervallen, obwohl gelegentlich zu bestimmten Zeiten Ausgabe durch das Makro.Führen Sie Makro automatisch über VBScript von Timer
Ich habe das Problem auf zwei Arten angesprochen, von denen beide Probleme haben, die ich nicht herausfinden kann. Der erste Ansatz besteht darin, eine Zeitgeberkomponente zu verwenden, die den Makro mithilfe des Befehls Application.OnTime ausführt, wobei die Laufzeit von einer Zelle in der Arbeitsmappe abgeleitet wird, die vom Makro aktualisiert wird.
Diese Methode funktioniert ziemlich gut, wenn ich auf dem Computer etwas anderes mache. Ich habe jedoch bemerkt, dass, wenn ich gehe, auch wenn der Computer nicht schlafen geht, das Programm unweigerlich nach etwa 30 Minuten wieder läuft. Manchmal hört es auch auf, wenn ich auf dem Computer aktiv bin. Warum ist das? Was könnte das verursachen? Natürlich kann ich das Programm auch nicht so programmieren, dass es automatisch innerhalb des Makros geöffnet und ausgeführt wird. Daher wandte ich mich an die Taskplaner-Methode VBScript & für diesen Teil der Lösung.
Ich habe jedoch zwei Probleme mit der Ausführung des VBScript aufgetreten. Erstens kann es oft nicht gestartet werden, wenn es vom Taskplaner ausgeführt wird. Zweitens, wenn es ausgeführt wird, funktioniert der Application.OnTime Befehl innerhalb des Makros nicht. Dies ist ein Problem, da das Makro manchmal in unregelmäßigen Zeitintervallen ausgeführt werden muss, die im Laufe des Tages ermittelt werden, während das Makro seine Iterationen durchläuft. Warum sollte das VBScript nicht ausgeführt werden, wenn der Task-Manager es versucht, und warum würde es den Befehl "application.ontime" nicht so starten, wie es das Makro tut, wenn ich es manuell ausführe?
VBA Timer-Code:
Sub Timer()
Dim Runtime As Date
If Time <= TimeValue("17:45:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 10
ElseIf Time > TimeValue("17:45:00") And Time <= TimeValue("18:15:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 13
ElseIf Time > TimeValue("18:15:00") And Time <= TimeValue("18:45:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 16
ElseIf Time > TimeValue("18:45:00") And Time <= TimeValue("19:15:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 19
End If
Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Calculate
If Time > Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Value Then
Runtime = Time + TimeValue("00:00:30")
Else
Runtime = Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Value
End If
Application.OnTime TimeValue(Runtime), "Swingtimer"
Workbooks("10am_Swing_Report").Sheets("Parameters").Range("C16").Value = Runtime
Workbooks("10am_Swing_Report").Save
End Sub
Dank!
Ich habe den Vbs-Code aktualisiert, um eine Überprüfung zu enthalten, dass die Laufzeit übergeben wurde, aber ich habe immer noch ein Problem mit Taskplaner fehlgeschlagen, um die Aufgabe zu starten. Ich erhalte den folgenden Fehler: "Launch-Anfrage ignoriert, Instanz läuft bereits", gefolgt von: "Task Start Failed". Ich dachte ursprünglich, dies sei, weil das VBScript immer noch von der vorherigen Instanz lief, aber ich bekomme das von Anfang an.
Option Explicit
Dim xlApp
Dim xlBook
Dim runtime
Dim xlSheet
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
'xlApp.Application.DisplayAlerts = True
Set xlBook = xlApp.Workbooks.Open("C:\Users\DORIAN\Dropbox\Swing_Report.xlsm",1,False)
Set xlSheet = xlBook.Sheets("Parameters")
'xlBook.application.Visible = True
'MsgBox FormatDateTime(xlSheet.Range("B16").Value,3)
runtime = TimeValue(FormatDateTime(xlSheet.Range("B16").Value,3))
'MsgBox runtime
If Time > runtime Then
xlApp.Run "Swingtimer"
'MsgBox "Running..."
WScript.Sleep 30000
Else
xlApp.Application.OnTime runtime, "Swingtimer"
'MsgBox "Timer Set"
End If
xlbook.close True
WScript.Quit
Bitte geben Sie den Code sowohl der VBA und VBScript Teile. Wie es jetzt gesagt wird, gibt es nicht viel, was als Antwort zur Verfügung gestellt werden kann. – trincot