Saltar al contenido

Ejecucion excel/macro en segundo plano


Recommended Posts

publicado

Buenas tardes.

Necesito ayuda con el archivo adjunto.

Tengo un archivo donde realizo un control sobre las cuentas de varios empleados (+ de 50 en total), donde al apretar el botón de "CTROL CTAS. EMPLEADOS", automáticamente se copia el primer numero de cuenta del Excel, se activa otro programa llamado "Emulación 3270", se realizan un par de acciones donde dentro del programa se pasa por diferentes opciones para luego pegar el numero de cuenta, y lo pega en el programa Emulación donde luego imprime la pantalla con "F6", vuelve a la pantalla de inicio del programa y empieza nuevamente con el siguiente numero de cuenta, así sucesivamente hasta que llega a la celda en blanco.

Lo que necesito que haga:

Que todo el proceso descripto anteriormente lo haga en segundo plano, donde siga trabajando, y yo pueda utilizar otras aplicaciones, ya que el control de empleados me lleva mas de 10 minutos, y yo en ese tiempo necesito realizar otras tareas como autorizaciones que me envían desde otros puestos.

No soy un experto en Vb Macros, pero mayormente entiendo el código.

El archivo adjunto lo arme yo, pero no desde cero, sino copiando otro Excel donde mas o menos realizaba la misma acción, donde lo fui acomodando a mi gusto.

Desde ya agradezco cualquier tipo de ayuda que me puedan brindar.

Un saludo.

 

EJEMPLO.xlsm

publicado

Con DoEvents, y lo utilizas mucho..!!!???

ESE ESTILO DE PROGRAMACIÓN ME RECORDÓ AL VIEJO CRIPPER 5.2 allá por 1985 un domingo por la tarde...?

DoEvents significa que haga los eventos, se utiliza para cuando tenes un ciclo do-loop, o un while-wend, o un for-next demasiado largo, eso generalmente se "adueña" del programa, agregándole una linea DoEvents en el lugar apropiado podes seguir corriendo tu aplicación sin interrupciones. EJ:
Private sub Command1_Click()
Dim Cont as integer
For Cont = 0 to 1000
'Codigo que ejecuta el ciclo
DoEvents
Next cont
End Sub

Tienes una programación como hecha a la "antigua"... como por allá de 1985 cuando yo empece a programar... y tienes muchos "pausa", no se si sean necesarios, a mi punto de vista se puede mejorar el código y hacer lo que hace en mucho menos tiempo.

Recuerda que DoEvents regresa el control a Windows Momentáneamente y hace las tareas pendientes y vuelve a tomar el control "Excel" en cada ciclo... por eso hay que calcular cuanto tiempo tarda en cada Iteración del Ciclo.

Saludos.

publicado
Hace 1 hora, GabrielArnal dijo:

Buenas tardes.

Necesito ayuda con el archivo adjunto.

Tengo un archivo donde realizo un control sobre las cuentas de varios empleados (+ de 50 en total), donde al apretar el botón de "CTROL CTAS. EMPLEADOS", automáticamente se copia el primer numero de cuenta del Excel, se activa otro programa llamado "Emulación 3270", se realizan un par de acciones donde dentro del programa se pasa por diferentes opciones para luego pegar el numero de cuenta, y lo pega en el programa Emulación donde luego imprime la pantalla con "F6", vuelve a la pantalla de inicio del programa y empieza nuevamente con el siguiente numero de cuenta, así sucesivamente hasta que llega a la celda en blanco.

Lo que necesito que haga:

Que todo el proceso descripto anteriormente lo haga en segundo plano, donde siga trabajando, y yo pueda utilizar otras aplicaciones, ya que el control de empleados me lleva mas de 10 minutos, y yo en ese tiempo necesito realizar otras tareas como autorizaciones que me envían desde otros puestos.

No soy un experto en Vb Macros, pero mayormente entiendo el código.

El archivo adjunto lo arme yo, pero no desde cero, sino copiando otro Excel donde mas o menos realizaba la misma acción, donde lo fui acomodando a mi gusto.

Desde ya agradezco cualquier tipo de ayuda que me puedan brindar.

Un saludo.

 

EJEMPLO.xlsm 23 kB · 1 descarga

Lo que puedes hacer es ejecutar el excel como Administrador y allí abrir tu archivo en el que ejecutarás tu macro...

De está manera, estarás creando otra estancia en excel y no te afectará a los demás libros, por lo cual podrás continuar trabajando...

Solo debes tener cuidado con algunas referencias que realices en tu proceso, y hacer referencias al libro y a las hojas en específicos, ya que si tiene algun código como por ejemplo Activesheet y tú está trabajando en otro excel, la macro tomaría en cuenta el dato incorrecto...

Saludos!

image.png.b0ac5153c989cdff9a5e22da4c1da1e5.png

publicado

Leopoldo Blancas y Luis Paz

Desde ya agradezco mucho vuestras respuestas. Igualmente estuve analizando cada una y no me ayudarian en mi caso.

En el codigo hay un monton de pausas ya que el cuando se activa el otro programa llamado Emulacion 3270, este tarda en realizar cada una de las acciones aprox 1 segundo o tal vez mas.

Por lopoco que entiendo, pero he leido, en la macro de mi archivo, utilizo las funciones SendKeys, las cuales no servirian para que se pueda ejecutar en segundo plano, sino tendria que ejecutar con codigo ASCII o algo asi. No se si me explico bien.

Nuevamente muchas gracias por vuestra ayuda.

publicado
Hace 9 horas, GabrielArnal dijo:

Igualmente estuve analizando cada una y no me ayudarian en mi caso.

Lo que podrías hacer es explicar todo el proceso que necesitas realizar, porqu viendo tu código no consigo entender lo que estás haciendo. Aparte que programa es Emulacion 3270 y que relación tiene con tu fichero excel

publicado

Buenas. El proceso que realiza es el siguiente:

Dentro de la empresa donde trabajo tenemos un programa el cual se llama Emulacion 3270. En cuanto al entorno del programa es muy similar a la imagen siguiente, donde dice Option, donde ahi se ingresa a que opcion se desea ingresar, para luego ingresar el dato que uno desee, por ejemplo el numero de cuenta de una persona y sacar los moviemientos:

image.thumb.png.d56a3e5c84ea2a7fb44d61e633815b7f.png

Lo que realiza el excel es lo siguiente: Una vez que se ejecuta la macro, excel busca el programa Emulacion 3270, donde pasa a mostrar el programa en la pantalla, y empieza a enviar "SendKeys" que uno cargo en la macro (Ejemplo: Envia "1", luego Ctrol, Luego Envia "2", luego Ctrol, Envia "N° cuenta" (El cual es el dato de la celda A1), envia Ctrol, Envia "F6" (Que seria imprimir), envia "F3" (que seria retroceder), y vuelve a la pantalla inicial donde sigue con el siguiente numero de cuenta (A2), y asi sucesivamente hasta que no encuentra mas numeros de cuenta.

En cada cambio de pantalla que se produce debido al envio de una Sendkey, el programa Emulacion 3270 tarda en mostrar la pantalla, por lo que se pusieron muchas Pausas, y en lo que dice en la macro Leedatos, se refiere a que una vez que reconoce el titulo de la pantalla que muestra el programa, realiza la accion siguiente.

Lo que necesito realizar, es que todo esto lo haga con todas las ventanas minimizadas tanto del Excel, como del Emulacion, y que pueda seguir utilizando la computadora, por ejemplo para trabajar con el Word, o utilizar otro programa de la empresa, sin necesidad de esperar a que termine de realizar todo el proceso descripto anteriormente.

Espero haber sido lo mas claro posible. Cualquier cosa me avisas y veo si encuentro otra manera de poder explicarlo mejor.

Desde ya muchas gracias.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.