gibt es eine Möglichkeit ein Makro Zeitgesteuert auszuführen.
zB alle 10 Minuten dieses Makro zu starten.
Für hilfe währe ich sehr dankbar
Gruß Peter
Makros, Code in einem allgemeinen Modul:
Public Thiswb As Workbook, Zeit As Date
Sub Test()
Dim Delta As Double
'...Makrobefehle
'beim Aufruf von Zellen, Sheets etc. immer das Workbbook durch die Objekt-Variable Thiswb mit angegeben !
'wenn sich Aktionen auf diese Arbeitsmappe beziehen sollen, sonst wird in der gerade aktiven Datei eine Aktion ausgeführt.
Thiswb.Sheets("Tabelle1").Cells(2, 4) = 12
'Zeilen zur wiederholten Ausführung des Makros
Delta = 10 'Zeit in Minuten bis zur nächsten Ausführung
Zeit = Now + Delta / 60 / 24 'Zeitpunkt der nächsten Ausführung
Application.OnTime EarliestTime:=Zeit, Procedure:="Test"
End Sub
Sub OnTimeAbbrechen()
'Abschalten von OnTime-Ereignissen
On Error Resume Next
Application.OnTime EarliestTime:=Zeit, Procedure:="Test", Schedule:=False
End Sub
Makros, Code unter "DieseArbeitsmappe:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call OnTimeAbbrechen
End Sub
Private Sub Workbook_Open()
Set Thiswb = ThisWorkbook
'Nachfolgende Zeile deaktivieren, wenn Makro "Test" manuell gestartet werden soll
Call Test 'Makro, das sich wiederholen soll, starten.
End Sub
Sub Makro38()
Application.ScreenUpdating = False
For Each wkb In Workbooks
If LCase(wkb.Name) = "Mittelwerte.xls" Then
blnOpen = True
Exit For
End If
Next wkb
On Error GoTo Ende
If Not blnOpen Then
Workbooks.Open ThisWorkbook.Path & "\Mittelwerte.xls", UpdateLinks:=False
ThisWorkbook.Sheets(1).Cells.Calculate
ActiveWorkbook.Close savechanges:=True
End If
Ende:
End Sub
' Dieser Code gehört in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopMakro
End Sub
Private Sub Workbook_Open()
bStopRun = False
Call RunMakro
End Sub
Option Explicit
' Dieser Code gehört in ein Modul
Public Const dIntervallSek = 30 ' Intervall in Sekunden
Public dNextRun As Double
Public bStopRun As Boolean
Sub Makro38()
Dim wkb As Workbook
Dim blnOpen
Application.ScreenUpdating = False
For Each wkb In Workbooks
If LCase(wkb.Name) = "Mittelwerte.xls" Then
blnOpen = True
Exit For
End If
Next wkb
On Error GoTo Ende
If Not blnOpen Then
Workbooks.Open ThisWorkbook.Path & "\Mittelwerte.xls", UpdateLinks:=False
ThisWorkbook.Sheets(1).Cells.Calculate
ActiveWorkbook.Close savechanges:=True
End If
Ende:
End Sub
Public Sub RunMakro()
If bStopRun Then Exit Sub
Call Makro38
dNextRun = Now() + TimeSerial(0, 0, dIntervallSek)
Application.OnTime dNextRun, "RunMakro"
Application.StatusBar = "Makro38 läuft wieder um " & Now() + TimeSerial(0, 0, dIntervallSek)
End Sub
Public Sub StopMakro()
bStopRun = True
If dNextRun <> 0 Then Application.OnTime dNextRun, "RunMakro", , False
Application.StatusBar = "Makro38 ist gestoppt!"
dNextRu
' Dieser Code gehört in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopMakro
End Sub
Private Sub Workbook_Open()
bStopRun = False
Call RunMakro
End Sub
' Dieser Code gehört in ein Modul
Option Explicit
Public Const dIntervallSek = 30 ' Intervall in Sekunden
Public dNextRun As Double
Public bStopRun As Boolean
Sub Makro38()
Dim wkb As Workbook
Dim blnOpen
Application.ScreenUpdating = False
For Each wkb In Workbooks
If LCase(wkb.Name) = "Mittelwerte.xls" Then
blnOpen = True
Exit For
End If
Next wkb
On Error GoTo Ende
If Not blnOpen Then
Workbooks.Open ThisWorkbook.Path & "\Mittelwerte.xls", UpdateLinks:=False
ThisWorkbook.Sheets(1).Cells.Calculate
ActiveWorkbook.Close savechanges:=True
End If
Ende:
End Sub
Public Sub RunMakro()
If bStopRun Then Exit Sub
Call Makro38
dNextRun = Now() + TimeSerial(0, 0, dIntervallSek)
Application.OnTime dNextRun, "RunMakro"
Application.StatusBar = "Makro38 läuft wieder um " & Now() + TimeSerial(0, 0, dIntervallSek)
End Sub
Public Sub StopMakro()
bStopRun = True
If dNextRun <> 0 Then Application.OnTime dNextRun, "RunMakro", , False
Application.StatusBar = "Makro38 ist gestoppt!"
dNextRun = 0
End Sub
Um ein Excel Makro automatisch zeitgesteuert auszuführen, kannst du die Application.OnTime
Methode verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:
Öffne den VBA-Editor: Drücke ALT + F11
in Excel, um den Visual Basic for Applications (VBA) Editor zu öffnen.
Erstelle ein Modul: Rechtsklicke im Projektfenster auf "VBAProject (dein Arbeitsbuch)" und wähle Einfügen > Modul
.
Füge den folgenden Code ein:
Public Const dIntervallSek = 30 ' Intervall in Sekunden
Public dNextRun As Double
Public bStopRun As Boolean
Sub Makro38()
Dim wkb As Workbook
Dim blnOpen As Boolean
Application.ScreenUpdating = False
For Each wkb In Workbooks
If LCase(wkb.Name) = "Mittelwerte.xls" Then
blnOpen = True
Exit For
End If
Next wkb
On Error GoTo Ende
If Not blnOpen Then
Workbooks.Open ThisWorkbook.Path & "\Mittelwerte.xls", UpdateLinks:=False
ThisWorkbook.Sheets(1).Cells.Calculate
ActiveWorkbook.Close SaveChanges:=True
End If
Ende:
End Sub
Public Sub RunMakro()
If bStopRun Then Exit Sub
Call Makro38
dNextRun = Now() + TimeSerial(0, 0, dIntervallSek)
Application.OnTime dNextRun, "RunMakro"
Application.StatusBar = "Makro38 läuft wieder um " & Now() + TimeSerial(0, 0, dIntervallSek)
End Sub
Public Sub StopMakro()
bStopRun = True
If dNextRun <> 0 Then Application.OnTime dNextRun, "RunMakro", , False
Application.StatusBar = "Makro38 ist gestoppt!"
dNextRun = 0
End Sub
Füge den Code in "DieseArbeitsmappe" ein: Gehe im Projektfenster zu "DieseArbeitsmappe" und füge folgendes ein:
Private Sub Workbook_Open()
bStopRun = False
Call RunMakro
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopMakro
End Sub
Speichere deine Arbeitsmappe als Makro-Enabled Workbook: Wähle Datei > Speichern unter
und wähle das Format Excel-Arbeitsmappe mit Makros (*.xlsm)
.
Fehler: "Makro kann nicht gefunden werden"
Stelle sicher, dass der Name des Makros, das du in Application.OnTime
verwendest, korrekt ist und es im richtigen Modul gespeichert ist.
Fehler: Arbeitsmappe schließt sich sofort
Überprüfe, ob der Code im Workbook_BeforeClose
korrekt ist und dass StopMakro
aufgerufen wird, um laufende Timer zu stoppen.
Fehler: Statusleiste zeigt nicht den erwarteten Text an
Stelle sicher, dass du Application.StatusBar
korrekt verwendest und dass keine vorherigen Statusleisten-Texte die Anzeige stören.
Falls du eine andere Methode zur zeitgesteuerten Ausführung deines Excel Makros suchst, kannst du auch Windows geplante Tasks in Kombination mit VBA verwenden. Du kannst ein Makro erstellen, das über ein Batch-Skript oder eine .vbs-Datei aufgerufen wird, die dann einen Zeitplan im Windows Task Scheduler hat.
Makro alle 10 Minuten ausführen: Ändere den Wert von dIntervallSek
auf 600 (10 Minuten).
Public Const dIntervallSek = 600 ' Intervall in Minuten
Makro täglich um eine bestimmte Uhrzeit ausführen: Du kannst Application.OnTime
so anpassen, dass es täglich zu einer bestimmten Uhrzeit ausgeführt wird.
Dim Zeit As Date
Zeit = TimeValue("14:00:00") ' 14 Uhr
Application.OnTime Zeit, "RunMakro"
Application.ScreenUpdating = False
in deinen Makros, um die Ausführung zu beschleunigen und Bildschirmflackern zu vermeiden.1. Wie kann ich das Makro sofort ausführen, anstatt auf den Timer zu warten?
Du kannst das Makro direkt aufrufen, indem du einfach Call RunMakro
in den Workbook_Open
Sub einfügst.
2. Was passiert, wenn ich die Arbeitsmappe schließe?
Der Workbook_BeforeClose
Sub wird aufgerufen, der das Makro stoppt, sodass keine Timer mehr laufen, während die Arbeitsmappe geschlossen ist.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen