Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro Zeitgesteuert ausführen

Makro Zeitgesteuert ausführen
09.10.2006 08:39:59
Peter
Hallo Excelfreunde
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
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Application.OnTime o.T.
09.10.2006 10:50:45
EtoPHG
AW: Application.OnTime
09.10.2006 11:00:58
Peter
Hallo Excelfreund/e
On Time !!
Und wie kann ich das bewerkstelligen.
Habe leider keine Ahnung wie ich das machen soll.
Gruß Peter
AW: Application.OnTime
09.10.2006 11:16:42
fcs
Hallo Peter,
mit folgender Makro-Struktur
Gruß
Franz

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

Anzeige
AW: Application.OnTime
09.10.2006 13:37:16
Peter
Hallo Excelfreunde
irgendwie bekomme ich das nicht hin.
ich habe sehr wenig Ahnung von Vba und bin daher auf Hilfe angewiesen.
Wie setze ich den Code in dieses Makro ein.!!!

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

Denn dieses Makro soll zB alle 30 Sekunden ausgeführt werden und nicht einmalig nach einer bestimmten Zeit.
Gruß Peter
Anzeige
AW: Application.OnTime
09.10.2006 16:08:24
EtoPHG
Hallo Peter,

'   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

Gruss Hansueli
Anzeige
AW: Application.OnTime
09.10.2006 16:49:53
Peter
Hallo Excelfreund
ich muss nocheinmal wegen des Codes nachfragen.
Dieser Code: Ist das richtig, da hier Excel eine Fehlermeldung ausgibt.
Public Sub StopMakro()
bStopRun = True
If dNextRun 0 Then Application.OnTime dNextRun, "RunMakro", , False
Application.StatusBar = "Makro38 ist gestoppt!"
dNextRu
Gruß Peter
Anzeige
AW: Application.OnTime
09.10.2006 16:50:46
EtoPHG
Hallo Peter,
Hab gesehen das beim vorigem Post einige Sachen durcheinander gerieten.
Makro38 läuft automatisch nach Öffnen der Arbeitsmappe und wird dann im Abstand von
dIntervallSek (30) Sekunden wiederholt.
Hier nochmals vollständig:

'   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

Gruss Hansueli
Anzeige
AW: Ok
09.10.2006 16:58:37
Peter
Hallo Excelfreund
genau das löst das Problem.
Vielen dank für deine / eure Hilfe.
Gruß Peter
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel Makro Zeitgesteuert Ausführen


Schritt-für-Schritt-Anleitung

Um ein Excel Makro automatisch zeitgesteuert auszuführen, kannst du die Application.OnTime Methode verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein Modul: Rechtsklicke im Projektfenster auf "VBAProject (dein Arbeitsbuch)" und wähle Einfügen > Modul.

  3. 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
  4. 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
  5. Speichere deine Arbeitsmappe als Makro-Enabled Workbook: Wähle Datei > Speichern unter und wähle das Format Excel-Arbeitsmappe mit Makros (*.xlsm).


Häufige Fehler und Lösungen

  • 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.


Alternative Methoden

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.


Praktische Beispiele

  1. Makro alle 10 Minuten ausführen: Ändere den Wert von dIntervallSek auf 600 (10 Minuten).

    Public Const dIntervallSek = 600  ' Intervall in Minuten
  2. 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"

Tipps für Profis

  • Verwende Application.ScreenUpdating = False in deinen Makros, um die Ausführung zu beschleunigen und Bildschirmflackern zu vermeiden.
  • Teste deinen Code gründlich, bevor du ihn in einer produktiven Umgebung verwendest, um unerwartete Fehler zu vermeiden.
  • Nutze die Statusleiste, um den Fortschritt oder Status deines Makros anzuzeigen. Dies ist besonders nützlich bei längeren Berechnungen.

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige