11 Stimmen

Wie können Sie ein Excel-Makro über eine Zeitplanaufgabe ausführen?

Ich muss ein Makro in einem Excel-Tabellenblatt über eine Zeitplanaufgabe ausführen. Ich habe den Auftrag wie folgt definiert:

" C:\Program Archivos \Microsoft Büro \Office10\EXCEL.EXE " ""

Das Problem ist, dass Excel beim Starten des Auftrags ein Popup-Fenster anzeigt und fragt, ob die Makros deaktiviert/aktiviert werden sollen, wodurch die Ausführung des Auftrags blockiert wird.

Wie kann ich dieses Makro ausführen, ohne manuell auf "Makro aktivieren" klicken zu müssen?

9voto

Tim Williams Punkte 135514

Schreiben Sie ein kurzes vbscript, das Excel startet, Ihre Arbeitsmappe lädt und Application.Run verwendet, um das Makro auszuführen. Lassen Sie Ihre geplante Aufgabe das vbscript ausführen.

Beispiel: http://www.mrexcel.com/forum/showthread.php?t=302970

3voto

Taptronic Punkte 5003

Sie geben nicht an, welche Version von Excel oder welche Version von Windows (oder Macintosh), so werde ich angeben, dass ich Excel 2010 von Office 32-Bit auf Windows 7 Ultimate 64-Bit verwende...


Wenn Sie Ihre Arbeitsmappe geöffnet lassen und den Code zu einem bestimmten Zeitpunkt später ausführen möchten, versuchen Sie dies.

Fügen Sie ein neues Codemodul in Ihr Projekt ein - oder verwenden Sie eines, das Sie bereits in Ihrem Projekt haben.

Erstellen Sie eine Scheduler-Unterroutine wie unten gezeigt:

Sub Scheduler()

'-- RUNS SUB(S) (OR FUNCTIONS) AT TIME SCHEDULED.

    Application.OnTime TimeValue("11:46:40"), "TheScheduledSub"

End Sub

Erstellen Sie ein Unterprogramm (oder eine Funktion), die Sie ausführen möchten. Hier ist eine für dieses Beispiel:

Sub TheScheduledSub()

    Debug.Print "TheScheduledSub() has run at " & Time

End Sub

Scheduler() wird ausgeführt TheScheduledSub() genau zu dem Zeitpunkt, der in Scheduler() definiert durch TimeValue . Sie können mehr lesen über TimeValue aquí .

Sie könnten wahrscheinlich den Zeitwert, den der Scheduler()-Sub zur Ausführung Ihrer Sub(s) oder Funktion(en) benötigt, als Parameter im Sub übergeben.

Sie könnten wahrscheinlich eine Zeit unter 5 Stunden laufen, sagen wir mal. D.H.. Application.OnTime Now + TimeValue("05:00:00"), "TheScheduledSub"

oder vielleicht in einem Tag von jetzt an? Spielen Sie damit herum.

Ich habe es geschafft, dass zwei Subs zu unterschiedlichen Zeiten ausgeführt wurden. Ich habe auch versucht, zwei zur gleichen Zeit auszuführen. Meine Erfahrung mit zwei verschiedenen Unterprogrammen, die gleichzeitig ausgeführt werden, war, dass das zweite Unterprogramm vor dem ersten ausgeführt zu werden schien, aber ich habe es nicht vollständig erforscht. Also YMMV.

Ich glaube nicht, dass Excel VBA multithread-fähig ist, also bedenken Sie das. Ich verwende das 32-Bit-Excel 2010 aus der Office-Suite. Ich bin mir nicht sicher, wie sich das 64-Bit-Office-Excel verhält, und auch nicht, wie sich andere Versionen oder Plattformen verhalten. Wie auch immer, Multithreading / Multitasking Excel VBA ist nicht das, was Sie gefragt haben, aber es ist zu berücksichtigen.

Nachdem ich diese Frage gesehen und mit den obigen Informationen gespielt habe, fallen mir einige Ideen ein, die ich selbst ausprobieren möchte!

0voto

dry Punkte 831

Sie können versuchen, die Sicherheitsstufe von Excel herabzusetzen, um dieses Popup-Fenster beim Starten von Excel zu vermeiden.

0voto

Bryan Punkte 1

Sie können auch die Arbeitsmappe öffnen und das Makro aufrufen. Lassen Sie einfach geplante Aufgaben die Arbeitsmappe öffnen, und das Makro wird ausgeführt, wenn die Arbeitsmappe geöffnet wird.

0voto

Tan Piyapat Punkte 11

Außerdem habe ich festgestellt, dass es eine gute Idee ist, eine

Application.DisplayAlerts = False

am Anfang, um alle Popup-Meldungen zu deaktivieren, die Ihr Makro bei der Ausführung unterbrechen könnten.

Oder sehen Sie sich das Tutorial-Video an: http://youtu.be/lFSgV2gym9g

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X