2012-01-18 36 views
9

Necesito ejecutar una macro en una hoja de cálculo de Excel a través de una tarea de programación. he definido el trabajo de la siguiente manera:Cómo se puede ejecutar una macro de Excel a través de una tarea de programación

"C: \ Archivos de programa \ Microsoft Office \ Office10 \ EXCEL.EXE" ""

El problema es que cuando se inicia el trabajo de Excel muestra un pop-up y pregunta si queremos deshabilitar/habilitar las macros, lo que bloquea la ejecución del trabajo.

¿Cómo puedo ejecutar esta macro sin tener que hacer clic manualmente en habilitar macro?

+0

Esto podría ayudar https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task -scheduler – Justin

Respuesta

8

Escriba un vbscript corto que inicie Excel, cargue su libro de trabajo y use Application.Run para ejecutar la macro. Haga que su tarea programada ejecute vbscript.

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

+0

+1 Mejor enfoque. Vale la pena codificar la macro dentro de vbs para garantizar que el código se ejecute, es decir, anular los problemas de las macros habilitadoras. – brettdj

+0

Parece que la secuencia de comandos funciona pero no impide el mensaje "Habilitar macros". Creo que puede tener algo que ver con una política de seguridad corporativa instalada en mi lugar de trabajo. – mek363

0

Puede intentar disminuir el nivel de seguridad de excel para evitar esta ventana emergente al iniciar Excel.

3

No se especifica qué versión de Excel o qué versión de Windows (o Macintosh) así que voy a especificar que estoy usando Excel 2010 de Office de 32 bits en Windows 7 Ultimate 64- poco ...


Si desea mantener el libro abierto y ejecutar código en un momento determinado, más adelante, entonces prueba este ..

Inserta un nuevo módulo de código en tu proyecto -o bien- usa uno que ya tengas en tu proyecto.

Crear una subrutina planificador como se muestra a continuación:

Sub Scheduler() 

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

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

End Sub 

Crear una subrutina (o función) que desea ejecutar. Aquí está uno para este ejemplo:

Sub TheScheduledSub() 

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

End Sub 

Scheduler() ejecutará TheScheduledSub() en el momento exacto especificado en el interior Scheduler(), definido por TimeValue. Puede leer más sobre TimeValuehere.

Probablemente podría pasar el valor de tiempo que desea que el subprograma Scheduler() ejecute su (s) sub (s) o función (es) como un parámetro en el sub.

Probablemente podría ejecutar un sub 5 horas a partir de ahora, digamos. ES DECIR. Application.OnTime Now + TimeValue ("05:00:00"), "TheScheduledSub"

o tal vez dentro de un día? Juega con eso.

Obtuve dos subs para ejecutar en diferentes momentos. También intenté ejecutar dos al mismo tiempo. Mi experiencia con dos subs diferentes ejecutándose al mismo tiempo fue que el segundo sub parecía ejecutarse antes que el primero, pero no lo he explorado completamente. Entonces, YMMV.

No creo que Excel VBA sea capaz de múltiples hilos, así que tenlo en cuenta. Estoy ejecutando Excel 2010 de 32 bits desde el paquete de Office. No estoy seguro de cómo se comporta Office Excel de 64 bits o, para el caso, cualquier otra versión o plataforma.De todos modos, Excel VBA multihilo/multitarea no es lo que pediste, pero debe ser considerado.

Al ver esta pregunta y jugar con lo anterior, ¡puedo pensar en algunas ideas que quiero probar!

0

También puede usar el libro de trabajo abrir y llamar a macro. Simplemente tenga las tareas programadas para abrir el libro de trabajo y la macro se ejecutará cuando se abra el libro de trabajo.

0

Además, he encontrado que es una buena idea tener

Application.DisplayAlerts = False

al comienzo de desactivar cualquier mensaje emergente que podría interrumpir la macro cuando se ejecuta.

O ver el video tutorial: http://youtu.be/lFSgV2gym9g

Cuestiones relacionadas