2012-01-18 15 views
9

Muszę uruchomić makro w arkuszu kalkulacyjnym programu Excel za pomocą zadania harmonogramu. Mam zdefiniowane zadanie, jak poniżej:Jak uruchomić makro programu Excel za pomocą zadania harmonogramu?

"C: \ Program Files \ Microsoft Office \ Office10 \ EXCEL.EXE" ""

Problem polega na tym, że kiedy zaczyna się praca Excel wyświetla pop-up i pyta, czy chcemy wyłączyć/włączyć makra, co blokuje wykonanie zadania.

Jak uruchomić to makro bez ręcznego klikania makra włączania?

+0

To może pomóc https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task -scheduler – Justin

Odpowiedz

8

Napisz krótki vbscript, który uruchamia Excel, ładuje twój skoroszyt i używa Application.Run do uruchomienia makra. Masz zaplanowane zadanie uruchomić vbscript.

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

+0

+1 Najlepsze podejście. Warto wiele razy przekodować makro wewnątrz vbs, aby zapewnić działanie kodu, tj. Pokonać problemy z makr włączaniem. – brettdj

+0

Wygląda na to, że skrypt działa, ale nie zapobiega wyświetlaniu monitu "Włącz makra". Myślę, że może to mieć coś wspólnego z zainstalowaną polityką bezpieczeństwa korporacyjnego w moim miejscu pracy? – mek363

0

Możesz spróbować obniżyć poziom bezpieczeństwa programu Excel, aby uniknąć tego pojawienia się podczas uruchamiania programu Excel.

3

Nie określić, jaka wersja programu Excel lub jaka wersja systemu Windows (lub Macintosh), więc będzie określić, że używam Excel 2010 z Office 32-bitowy Windows 7 Ultimate 64- nieco ...


Jeśli chcesz zachować skoroszyt otwarty i uruchomienie kodu w określonym czasie w przyszłości, a następnie spróbuj to ..

Włóż nowy moduł kodu do swojego projektu lub użyj tego, który już masz w swoim projekcie.

Tworzenie podprogramu planującego, jak pokazano poniżej:

Sub Scheduler() 

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

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

End Sub 

Tworzenie podprogramu (lub funkcja), który chcesz uruchomić. Oto jeden dla tego przykładu:

Sub TheScheduledSub() 

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

End Sub 

Scheduler() wykona TheScheduledSub() dokładnie w określonym czasie wewnątrz Scheduler(), zdefiniowanej przez TimeValue. Możesz przeczytać więcej o TimeValuehere.

Prawdopodobnie mógłbyś przekazać wartość czasu, którą podrzędny Scheduler() ma wykonać, wykonując swoje sub (s) lub funkcje jako parametr w podsieci.

Prawdopodobnie można uruchomić od 5 godzin, powiedzmy. TO ZNACZY. Application.OnTime Now + TimeValue ("05:00:00"), "TheScheduledSub"

A może za dzień? Pobaw się z tym.

Otrzymałem dwie subskrypcje do wykonania w różnych momentach. Próbowałem też wykonać dwa jednocześnie. Moje doświadczenie z dwoma różnymi podsłuchami wykonywanymi w tym samym czasie było takie, że drugi sub wydawał się wykonywać przed pierwszym, ale nie w pełni go zbadałem. Więc YMMV.

Nie sądzę, że Excel VBA jest zdolny do wielowątkowych, więc miej to na uwadze. Korzystam z 32-bitowego programu Excel 2010 z pakietu Office. Nie wiesz, jak zachowuje się 64-bitowy program Office Excel lub w jakiejkolwiek innej wersji lub platformie.W każdym razie, wielowątkowość/wielozadaniowość Excel VBA nie jest tym, o co prosiłeś, ale należy to wziąć pod uwagę.

Widząc to pytanie i bawiąc się powyższym, mogę wymyślić kilka pomysłów, które chcę wypróbować!

0

Można również użyć makro otwartego i wywołania skoroszytu. Po prostu zaplanuj zadania otwórz skoroszyt, a makro uruchomi się po otwarciu skoroszytu.

0

Również uważam, że to dobry pomysł, aby mieć

Application.DisplayAlerts = False

na początku wyłączyć dowolną wiadomość popup, które mogłyby przeszkodzić w makro podczas biegu.

Albo obejrzeć samouczek wideo: http://youtu.be/lFSgV2gym9g

Powiązane problemy