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

Makro soll nach n Sekunden starten

Forumthread: Makro soll nach n Sekunden starten

Makro soll nach n Sekunden starten
13.08.2002 09:29:34
Mike
Seid gegrüßt,
bräuchte mal wieder die Hilfe der Fachleute.
Bei jedem Öffnen der Arbeitsmappe und bei jedem Wechsel des Tabellenblattes (Jan-Dez) wird eine msg-Box zur Datumseingabe automatisch sofort gestartet.
Ich wollte nun fragen, ob man diesen Start um z.B. 3 Sekunden verzögern kann?
Wie müssen die Makros ggf. verändert werden?
In "Diese Arbeitsmappe" steht dieses Makro:

und in jedem Tabellenblatt (Jan-Dez) dieses:
~begin~
Private Sub Worksheet_Activate()
Range("A55").Value = DATUMSABFRAGE
blnInitialisierung = True 'Variable setzen um die Initialisierung der Userform bei Visible-Abfrage abzubrechen.
If Zeit.Visible = False Then 'Wenn Userform nicht angezeigt.
blnInitialisierung = False
Unload Zeit 'Userform Entladen. (Da sie beim abfragen initialisiert wird)
Exit Sub 'Abbrechen.
End If
Initialisierung False
blnInitialisierung = False
End Sub
~end~

Gruß
Mike
P.S.: Weiß nicht, warum das 2.Makro nicht richtig dargestellt wird.



Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Makro soll nach n Sekunden starten
13.08.2002 13:24:05
Charlie
Hallo, Mike!

Den Aufruf der Userform oder der InputBox zur Datumseingabe kannst Du verzögern, indem Du z.B. vor den Aufruf den Befehl
Application.Wait Now + TimeValue("00:00:03")
setzt. Dieser Befehl blockiert das Makro für die Dauer von 3 Sekunden. Eine andere Möglichkeit wäre Application.OnTime..., was bei 3 Sekunden aber wenig Sinn macht.

Zur Darstellung der Makros im Forum:
Es ist nicht möglich mehrere Makros mit "begin" und "end" abzugrenzen. Wenn Du mehrere Codes formatiert posten willst, musst Du alles zwischen 1 "begin" und 1 "end" packen.

Viel Erfolg,
Charlie

Anzeige
Re: Makro soll nach n Sekunden starten
13.08.2002 14:39:41
Mike
Hallo Charlie,
danke dass du dich der Sache angenommen hast.
Habe das Makro im Tabellenblatt jetzt so abgeändert und es funktioniert:
Ich möchte aber noch folgendes erreichen:
Wenn ich innerhalb der 3 Sekunden in ein anderes Tabellenblatt wechsle, soll im neuen Tabellenblatt nicht auch noch die InputBox des alten Tabellenblatts geöffnet werden, so wie dies jetzt der Fall ist. Oder wenn ich 2 Mal wechsle, werden im aktiven Blatt auch die 2 Boxen der zuvor angeklickten Blätter nacheinander geöffnet und erst zum Schluss die des aktiven Blatts.
Gibt es eine Lösung hierfür?

Gruß Mike

Anzeige
Re: Makro soll nach n Sekunden starten
13.08.2002 15:10:01
Charlie
Hallo, Mike!

Dass beim Aktivieren einer anderen Tabelle innerhalb der Wartezeit das Worksheet_Activate-Ereignis dieser Tabelle auch ausgeführt wird, ist klar, wenn Du in Deiner Do-Loop-Schleife mit DoEvents die Steuerung an Excel übergibst.

Wenn Du die Anweisung DoEvents weglässt, hast Du das Problem nicht, weil in diesem Fall ein Wechseln zu einem anderen Blatt gar nicht möglich ist (wie auch bei meiner "Wait"-Lösung). Welchen soll das für 3 Sekunden auch haben?

Soll es trotzdem möglich sein, kannst Du die Ausführung anderer Ereignisse nur verhindern, indem Du in der Ausgangstabelle vor der Do-Loop-Schleife die Events aus- und erst wenn die Wartezeit vorbei ist und der Dialog (Inputbox) angezeigt wurde, wieder einschaltest.

Ausschalten:
Application.EnableEvents = False
Einschalten:
Application.EnableEvents = True

Viel Erfolg,
Charlie

Anzeige
Re: Makro soll nach n Sekunden starten
13.08.2002 16:46:24
Mike
Hilfe Charlie,ich komme nicht klar.
Meine Mappe hat 12 Tabellenblätter (Jan-Dez).
Wenn ich die Arbeitsmappe öffne, und das Tabellenblatt nicht wechsle, wird die InputBox in dem gerade aktivierten Tabellenblatt gestartet(funzt auch).
Wenn ich hingegen vor dem Starten der InputBox das Tabellenblatt wechsle, wird auch hier die Box gestartet, aber nach dem Schließen der InputBox wird auch die Box des Blattes gestartet, das beim Öffnen der Mappe aktiviert war.
Ich möchte also im Prinzip dies, dass beim Wechseln des Tabellenblatts nur die InputBox des zuletzt aktivierten Blattes gestartet wird und die Ausführung der anderen Boxen verhindert wird.
Leider weiß ich nicht, wie das Makro dann richtig lauten muss und ob sich das auch umsetzen lässt.
Meine VBA-Kenntnisse sind leider nicht so gut, wie dies den Anschein erweckt.
Was müsste denn in "Diese Arbeitsmappe" stehen?

Gruß Mike

Anzeige
Re: Makro soll nach n Sekunden starten
13.08.2002 17:41:23
Charlie
Hallo, Mike!

Jetzt scheint der Fall klar zu sein. Du musst den Code, den Du bisher in den 12 Tabellen im Worksheet_Activate-Ereignis hattest, in eine Standard-Modul und ruf beim Aktivieren der Blätter immer nur die Prozedur "Irgendwas" auf.

In dieser Prozedur "Irgendwas" änderst Du die Referenzierung, indem Du ein "With ActiveSheet" einfügst (siehe Beispiel unten).

Beim Aktivieren einer Tabelle werden die Prozedur aufgerufen, die Events gedisabelt, nach der Wartezeit von 3 Sekunden wieder geenabelt (das hat den Sinn, dass durch die zwischenzeitigen Blattaktivierungen nicht jedesmall die Call-Anweisung ausgeführt wird) und der weitere Code bezogen auf das gerade aktive Blatt ausgeführt.

Versuch es mal aus: Ich habe anstelle Deines Codes eine MsgBox eingefügt, die nur den Registernamen anzeigt. Die musst Du, wenn Dir die Lösung gefällt natürlich wieder entfernen.

Viel Erfolg,
Charlie
P.S.: Das Auslagern des Codes aus den 12 Blättern in ein Modul hat auch einen weitern Vorteil, namlich dass die immer gleiche Prozedur nur 1x benötigt wird. Das ist auch bei Änderungen besser, weil Du diese dann nur 1x und nicht 12x machen musst.

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro nach n Sekunden automatisch starten


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro automatisch nach einer bestimmten Zeit auszuführen, kannst Du die Application.Wait-Methode verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du dies umsetzen kannst:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Finde das richtige Modul:

    • Navigiere zu „Diese Arbeitsmappe“ oder dem spezifischen Tabellenblatt, in dem Du das Makro ändern möchtest.
  3. Füge den Warte-Befehl hinzu:

    • Ersetze den Code in Worksheet_Activate mit folgendem:
      Private Sub Worksheet_Activate()
      Application.Wait Now + TimeValue("00:00:03") 'Warte 3 Sekunden
      Range("A55").Value = DATUMSABFRAGE
      ' Rest des Codes ...
      End Sub
  4. Teste das Makro:

    • Wechsel zu dem Tabellenblatt, um zu sehen, ob die InputBox nach 3 Sekunden erscheint.

Häufige Fehler und Lösungen

  • Fehler: InputBox erscheint bei Wechsel des Blattes
    Lösung: Verwende Application.EnableEvents = False vor der Wartezeit und Application.EnableEvents = True danach. Dadurch wird verhindert, dass das Ereignis für andere Blätter während der Wartezeit aktiviert wird.

  • Fehler: Run-Time Fehler 1004
    Lösung: Achte darauf, dass die Zeitangabe korrekt ist. Die Syntax Now + TimeValue("00:00:03") muss genau so eingegeben werden.


Alternative Methoden

Eine andere Methode, um ein Makro nach einer bestimmten Zeit auszuführen, ist die Verwendung von Application.OnTime. Dies ist jedoch eher für längere Zeiträume geeignet, da es den Code nicht blockiert. Hier ein Beispiel:

Sub StartMakroNachZeit()
    Application.OnTime Now + TimeValue("00:00:05"), "MeinMakro" '5 Sekunden warten
End Sub

Sub MeinMakro()
    ' Dein Code hier
End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie man ein Makro für die Eingabe eines Datums verzögern kann:

Private Sub Worksheet_Activate()
    Application.EnableEvents = False 'Deaktiviere Events
    Application.Wait Now + TimeValue("00:00:03") 'Warte 3 Sekunden
    ' Deine Logik hier
    Application.EnableEvents = True 'Aktiviere Events wieder
End Sub

In diesem Beispiel wird die InputBox für die Datumseingabe erst nach 3 Sekunden angezeigt und verhindert, dass andere Boxen während dieser Zeit aktiviert werden.


Tipps für Profis

  • Verwende DoEvents mit Bedacht: Wenn Du DoEvents in einer Schleife verwendest, kann der Benutzer mit der Excel-Oberfläche interagieren. Dies kann dazu führen, dass unerwünschte Ereignisse ausgelöst werden.

  • Wartezeiten anpassen: Überlege, ob die Wartezeit von 3 Sekunden für Deinen Anwendungsfall geeignet ist. Manchmal ist eine kürzere Wartezeit effektiver.

  • Modularer Code: Lagere wiederkehrende Code-Schnipsel in Module aus, um die Wartbarkeit Deiner Makros zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich ein Excel-Makro automatisch ausführen?
Du kannst Application.OnTime oder Application.Wait verwenden, um das Makro nach einer bestimmten Zeit zu starten.

2. Gibt es eine Möglichkeit, die Wartezeit dynamisch zu gestalten?
Ja, Du kannst eine Variable für die Wartezeit verwenden, die zur Laufzeit festgelegt wird, z.B. Application.Wait Now + TimeValue("00:00:" & CStr(Wartezeit)).

3. Was passiert, wenn ich während der Wartezeit das Blatt wechsel?
Wenn Du Application.EnableEvents = False verwendest, wird das Aktivieren des anderen Blattes ignoriert, bis die Wartezeit vorbei 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