2012-01-18 8 views
9

È necessario eseguire una macro in un foglio di calcolo di Excel tramite un'attività di pianificazione. ho definito il lavoro come di seguito:Come è possibile eseguire una macro di Excel tramite un'attività di pianificazione

"C: \ Programmi \ Microsoft Office \ Office10 \ EXCEL.EXE" ""

Il problema è che quando il processo si avvia Excel visualizza un pop-up e chiede se vogliamo disabilitare/abilitare i macro, che blocca l'esecuzione del lavoro.

Come posso eseguire questa macro senza dover cliccare manualmente su abilitare macro?

+0

Questo potrebbe aiutare https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task -scheduler – Justin

risposta

8

Scrivere un breve VBScript che lancia Excel, carica la cartella di lavoro e usa Application.Run per eseguire la macro. Fare in modo che l'attività pianificata esegua vbscript.

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

+0

+1 approccio migliore. Vale la pena di ricodificare la macro all'interno dei vbs per garantire che il codice venga eseguito, vale a dire per sconfiggere i problemi relativi alle macro di abilitazione. – brettdj

+0

Lo script sembra funzionare ma non impedisce il prompt "Abilita macro". Penso che possa avere qualcosa a che fare con una politica di sicurezza aziendale installata sul mio posto di lavoro? – mek363

0

Si può cercare di abbassare il livello di sicurezza di Excel in modo da evitare questo pop-up quando si avvia Excel.

3

Non si specifica quale versione di Excel o di quale versione di Windows (o Macintosh) quindi mi specificare che sto usando Excel 2010 da Office a 32 bit su Windows 7 Ultimate 64- po ...


Se si desidera mantenere la cartella di lavoro aperto e l'esecuzione di codice in un momento specifico, in seguito, quindi provare questo ..

Inserisci un nuovo modulo di codice nel tuo progetto -oppure- usa quello che hai già nel tuo progetto.

Creare una subroutine scheduler come illustrato di seguito:

Sub Scheduler() 

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

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

End Sub 

Creare una subroutine (o funzione) che si desidera eseguire. Qui è uno per questo esempio:

Sub TheScheduledSub() 

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

End Sub 

Scheduler() eseguirà TheScheduledSub() al momento esatto specificato all'interno Scheduler(), definita da TimeValue. Puoi leggere di più su TimeValuehere.

probabilmente si potrebbe passare il valore di tempo si desidera che la pianificazione() sub per eseguire il vostro sub (s) o la funzione (s) come parametro nel sotto.

Probabilmente si potrebbe eseguire un sub 5 ore da adesso, diciamo. OSSIA Application.OnTime Now + TimeValue ("05:00:00"), "TheScheduledSub"

o forse un giorno da oggi? Giocaci.

Ho ottenuto due sottotitoli da eseguire in momenti diversi. Ho anche provato ad eseguirne due allo stesso tempo. La mia esperienza con due diversi sottotitoli in esecuzione contemporaneamente era che il secondo sottotitolo sembrava essere eseguito prima del primo, ma non l'ho esplorato a fondo. Quindi YMMV.

Non credo che Excel VBA è multithread in grado in modo da tenere a mente. Sto eseguendo Excel 2010 a 32 bit dalla suite Office. Non sono sicuro di come si comporta Office Excel a 64 bit o di qualsiasi altra versione o piattaforma.In ogni caso, il multithreading/multitasking Excel VBA non è quello che hai chiesto, ma è da considerare.

Vedendo questa domanda e giocando con quanto sopra mi viene in mente un paio di idee che voglio provare me stesso!

0

È anche possibile utilizzare cartella di lavoro aperta e chiamare macro. compiti appena hanno in programma aprire la cartella di lavoro e la macro verrà eseguito quando cartella di lavoro viene aperta.

0

Inoltre, ho trovato è una buona idea avere

Application.DisplayAlerts = False

all'inizio per disattivare qualsiasi messaggio pop-up che potrebbe interrompere il macro durante l'esecuzione.

O vedere il video tutorial: http://youtu.be/lFSgV2gym9g

Problemi correlati