Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Pause einbauen in Makro

Pause einbauen in Makro
19.05.2021 11:22:44
Maxi
Hallo zusammen,
durch die Hilfe im Forum habe ich bereits fast das, was ich auch haben möchte. Es geht um folgendes: Ein Makro, das mir verschiedene Excel-Dateien öffnet und das wiederum darin enthaltene Makro ausführt. Soweit funktioniert das auch, nur habe ich das Problem, dass die 5 Excel-Dateien nach dem öffnen Zeit benötigen, um sich selbst zu aktualisieren, das Makro darf also für jede Datei erst nach circa 10 Sekunden ausgeführt werden, sonst werden die generierten Emails mit einem Anhang verschickt, der nicht aktuell ist. Ich möchte also verhindern, alle Dateien erst zu öffnen, auf die Aktualisierung zu warten (geschieht automatisch) und jede separat zu speichern um dann das u.g. Makro auszuführen. Wie bekomme ich die Pause zwischen öffnen der Dateien und ausführen des enthaltenen Makros?
Danke!!!
Grüße Maxi

Public Sub Main()
Call DateiOeffnen("FirmaXY1", "Makro1")
Call DateiOeffnen("FirmaXY2", "Makro2")
Call DateiOeffnen("FirmaXY3", "Makro3")
Call DateiOeffnen("FirmaXY4", "Makro4")
Call DateiOeffnen("FirmaXY5", "Makro5")
End Sub

Public Sub DateiOeffnen(strFilename As String, strMakroname As String)
Const FOLDER_PATH As String = "Ordnerpfad"
Dim objWorkbook As Workbook
Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename)
Call Application.Run("'" & objWorkbook.Name & "'!" & strMakroname)
Call objWorkbook.Close(SaveChanges:=False)
Set objWorkbook = Nothing
End Sub
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pause einbauen in Makro
19.05.2021 11:24:31
Hajo_Zi
Hallo Maxi,
vielleicht
Application.Wait Now + TimeSerial(0, 0, 10)
GrußformelHomepage
Anzeige
AW: Pause einbauen in Makro
19.05.2021 11:25:58
Beverly
Hi Maxi,
vielleicht hilft ja, vor Ausführen des nächsten Makros jeweils die Codezeile

Application.Wait Now + TimeValue("00:00:10")
einzufügen.

GrußformelBeverly's Excel - Inn
Anzeige
AW: Pause einbauen in Makro
19.05.2021 11:41:18
Maxi
Danke für den Vorschlag, scheint auch zu funktionieren allerdings aktualisieren sich die Excels nicht wenn ich sie mit dem Makro öffne. Öffne ich sie manuell aktualisieren sie sich selbst. Woran könnte das liegen?
Grüße:)
AW: Pause einbauen in Makro
19.05.2021 12:42:34
Beverly
Ist die Aktualisierung in den zu öffnenden Dateien vielleicht auf Manuell eingestellt? Dann könntest du in das Makro der Mappe noch ein Calcualte einbauen.

GrußformelBeverly's Excel - Inn
Anzeige
AW: Pause einbauen in Makro
19.05.2021 12:02:18
Nepumuk
Hallo Maxi,
war soll sich aktualisieren, Formel, Datenverbindungen ...?
Mit Wait ist Excel nicht in der Lage irgendetwas auszuführen. Das blockiert alles.
Gruß
Nepumuk
AW: Pause einbauen in Makro
19.05.2021 12:22:46
Daniel
Hi
Was genau bedeutet "die Datei muss sich erst aktualisieren"?
Wenn da von irgendwo weitere Daten importiert werden, müsstest du mal in die Einstellungen und Eigenschaften des Imports reinschauen, ggf gibt es dort eine Einstellung, mit der man festlegen kann, ob die Aktualisierung im Hintergrund stattfinden soll oder ob alles warten muss, bis diese fertig ist.
Gruß Daniel
Anzeige
AW: Pause einbauen in Makro
19.05.2021 13:26:17
Maxi
Hallo zusammen,
also: Die 5 Dateien, die ich auch verschicken will, enthalten Grafiken, die sich beim Öffnen bis zum aktuellen Datum aktualisieren, die Daten werden aus einer weiteren Excel-Datei bezogen.
Grüße
AW: Pause einbauen in Makro
19.05.2021 13:30:21
Daniel
besonders informationsfreudig bist du ja nicht.
Wie beziehst du die Daten aus der weiten Exceldatei?
hast du das, was ich dir empfohlen habe, mal angschaut und überprüft?
Gruß Daniel
Anzeige
AW: Pause einbauen in Makro
19.05.2021 13:40:15
Maxi
Hi Daniel,
sorry - ich versuche so detailreich wie möglich:
1. Es gibt eine Datei zur Stammdatenpflege von 5 Lieferanten, in die täglich die aktuellen Tageswerte fortlaufend eingetragen werden.
2. Daraus ergeben sich pro Lieferant jeweils eine Excel (in Summe 5), in der eine Pivot-Tabelle ist, die Daten aus Tabelle von Punkt 1. nimmt und daraus Grafiken über die aktuellen Tageswerte erstellt. Diese Grafiken / Pivot-Tabelle aktualisiert sich automatisch beim Öffnen der jeweiligen Datei, der Haken bei "Aktualisieren beim Öffnen der Datei" ist gesetzt.
Problem: Wenn ich mit meinem gezeigten Makro die 5 Excel-Dateien öffne, aktualisieren sie sich leider nicht mehr automatisch, sondern bleiben auf dem letzten Speicherstand (ab dem Tag an dem ich zuletzt manuell abgespeichert habe)
Hoffe so ists verständlicher ;)
Anzeige
AW: Pause einbauen in Makro
19.05.2021 13:31:59
Nepumuk
Hallo Maxi,
versuch es mal so:
Code:

[Cc]

Public Sub DateiOeffnen(strFilename As String, strMakroname As String) Const FOLDER_PATH As String = "Ordnerpfad" Dim objWorkbook As Workbook Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename, UpdateLins:=3) Call Application.Run("'" & objWorkbook.Name & "'!" & strMakroname) Call objWorkbook.Close(SaveChanges:=False) Set objWorkbook = Nothing End Sub

Gruß
Nepumuk
Anzeige
AW: Pause einbauen in Makro
19.05.2021 14:47:47
Maxi
Hi Nepumuk,
leider funktioniert das auch nicht, gleiches Problem wie zuvor, Dateien sind nicht auf aktuellem Stand...

Public Sub Main()
Call DateiOeffnen("FirmaXY1", "Makro1")
Call DateiOeffnen("FirmaXY2", "Makro2")
Call DateiOeffnen("FirmaXY3", "Makro3")
Call DateiOeffnen("FirmaXY4", "Makro4")
Call DateiOeffnen("FirmaXY5", "Makro5")
End Sub

Public Sub DateiOeffnen(strFilename As String, strMakroname As String)
Const FOLDER_PATH As String = "Ordnerpfad"
Dim objWorkbook As Workbook
Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename, UpdateLinks:=3)
Call Application.Run("'" & objWorkbook.Name & "'!" & strMakroname)
Call objWorkbook.Close(SaveChanges:=False)
Set objWorkbook = Nothing
End Sub

Anzeige
AW: Pause einbauen in Makro
19.05.2021 14:54:31
Nepumuk
Hallo Maxi,
nächster Versuch:
Code:

[Cc]

Public Sub DateiOeffnen(strFilename As String, strMakroname As String) Const FOLDER_PATH As String = "Ordnerpfad" Dim objWorkbook As Workbook Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename, UpdateLinks:=3) Call objWorkbook.RefreshAll Call Application.Run("'" & objWorkbook.Name & "'!" & strMakroname) Call objWorkbook.Close(SaveChanges:=False) Set objWorkbook = Nothing End Sub

Gruß
Nepumuk
Anzeige
AW: Pause einbauen in Makro
19.05.2021 16:05:01
Maxi
DANKE! Das hat funktioniert:)
Viele Grüße!
Maxi
;
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Pause in Makros einbauen


Schritt-für-Schritt-Anleitung

Um eine Pause in deinem Excel VBA Makro einzubauen, kannst du die Application.Wait-Methode verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne deinen VBA-Editor in Excel (drücke ALT + F11).

  2. Füge den folgenden Code in dein Modul ein:

    Public Sub Main()
       Call DateiOeffnen("FirmaXY1", "Makro1")
       Application.Wait Now + TimeValue("00:00:10") ' Pause von 10 Sekunden
       Call DateiOeffnen("FirmaXY2", "Makro2")
       Application.Wait Now + TimeValue("00:00:10") ' Pause von 10 Sekunden
       Call DateiOeffnen("FirmaXY3", "Makro3")
       Application.Wait Now + TimeValue("00:00:10") ' Pause von 10 Sekunden
       Call DateiOeffnen("FirmaXY4", "Makro4")
       Application.Wait Now + TimeValue("00:00:10") ' Pause von 10 Sekunden
       Call DateiOeffnen("FirmaXY5", "Makro5")
    End Sub
  3. Definiere die DateiOeffnen-Subroutine:

    Public Sub DateiOeffnen(strFilename As String, strMakroname As String)
       Const FOLDER_PATH As String = "Ordnerpfad"
       Dim objWorkbook As Workbook
       Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename, UpdateLinks:=3)
       objWorkbook.RefreshAll ' Aktualisiere alle Verbindungen
       Call Application.Run("'" & objWorkbook.Name & "'!" & strMakroname)
       Call objWorkbook.Close(SaveChanges:=False)
       Set objWorkbook = Nothing
    End Sub
  4. Teste dein Makro, um sicherzustellen, dass die Pausen richtig funktionieren und die Dateien sich aktualisieren.


Häufige Fehler und Lösungen

  • Fehler: Dateien aktualisieren sich nicht

    • Stelle sicher, dass die Aktualisierung der Datenverbindungen auf „Automatisch“ eingestellt ist. Andernfalls füge objWorkbook.RefreshAll in die DateiOeffnen-Subroutine ein, um die Aktualisierung zu erzwingen.
  • Fehler: Anwendung bleibt während der Pause eingefroren

    • Die Application.Wait-Methode blockiert Excel. Wenn du eine nicht blockierende Methode bevorzugst, probiere die Sleep-Funktion aus der kernel32-Bibliothek.
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Verwende Sleep anstelle von Application.Wait:

    Sleep 10000 ' Pausiert für 10 Sekunden

Alternative Methoden

  • Verwendung der Sleep-Funktion:

    • Diese Funktion ermöglicht es dir, eine Pause einzufügen, ohne Excel zu blockieren. Du kannst die Millisekunden anpassen, um die gewünschte Wartezeit zu erreichen.
  • Timer verwenden:

    • Du kannst auch einen Timer verwenden, um eine Pause zu implementieren, aber dies erfordert komplexere Programmierung und ist nicht immer notwendig für einfache Anwendungen.

Praktische Beispiele

Hier sind einige Beispiele, wie du die Pause in verschiedenen Szenarien verwenden kannst:

  1. E-Mail-Versand nach Aktualisierung: Du möchtest sicherstellen, dass alle Daten aktualisiert sind, bevor du E-Mails versendest. Verwende Application.Wait oder Sleep, um sicherzustellen, dass das Makro wartet.

  2. Datenimport aus externen Quellen: Wenn du Daten aus einer externen Quelle importierst, füge eine Pause ein, um sicherzustellen, dass alle Verbindungen vollständig hergestellt sind.


Tipps für Profis

  • Vermeide unnötige Pausen: Verwende Pausen nur, wenn es notwendig ist, um die Effizienz deines Codes zu verbessern.
  • Debugging: Teste dein Makro in einer kontrollierten Umgebung, um sicherzustellen, dass die Pausen wie gewünscht funktionieren.
  • Dokumentation: Halte deinen Code gut dokumentiert, besonders wenn du Pausen einfügst, damit du später nachvollziehen kannst, warum sie notwendig sind.

FAQ: Häufige Fragen

1. Wie lange sollte ich die Pause einfügen? Die Dauer hängt von der Aktualisierungsgeschwindigkeit deiner Daten ab. Beginne mit 10 Sekunden und passe es nach Bedarf an.

2. Kann ich die Pause in einer Schleife verwenden? Ja, du kannst die Pause in einer Schleife verwenden, um zwischen den Iterationen zu warten.

3. Was passiert, wenn ich die Pause zu kurz mache? Wenn die Pause zu kurz ist, könnte es sein, dass die Daten nicht rechtzeitig aktualisiert werden, was zu Fehlern führen kann.

4. Ist Application.Wait die beste Option für Pausen? Application.Wait ist eine einfache Methode, aber für längere oder wiederholte Pausen kann die Sleep-Funktion besser geeignet sein, da sie Excel nicht blockiert.

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