Saltar al contenido

Ejecucion excel/macro en segundo plano


Recommended Posts

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
    • Hola buenas tardes. En una hoja plantilla donde realizo diferentes consultas de datos. tengo ya establecido dos formulas diferentes con función SI y buscar. estos buscan diferentes rangos de datos y recibendiferentes resultados. Cada formula varia según una palabra o numero  ejemplo si pongo Xl pone la formula 1 y si pongo cualquier numero entre 1 y 3 pone la segunda formula. Lo que necesito hacer es que si en una celda de la columna B3 pongo XL debería de considerar la formula 1 y si pusiera el numero 1 me pondría la segunda formula, dentro de la misma formula. Ya agregue la función SI($C3="Xl",Formula1.. Pero no me funciona, espero me puedan ayudar.   Muchas gracias Mariano   Formula doble si en celda existe.xlsx
    • Sub control2558() Application.ScreenUpdating = False Dim I As Integer I = 4 While Sheets("FT-ADF-2558").Cells(I, 102) <> "" Sheets("FT-ADF-2558").Cells(6, 82) = Sheets("FT-ADF-2558").Cells(I, 102) Dim NombreArchivo, RutaArchivo As String NombreArchivo = "Hoja Control " & Sheets("FT-ADF-2558").Cells(I, 102) RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".xlsm" Dim NuevoLibro As Workbook Set NuevoLibro = Workbooks.Add Sheets("FT-ADF-2558").Copy Before:=NuevoLibro.Sheets(1) NuevoLibro.SaveAs Filename:=RutaArchivo NuevoLibro.Close I = I + 1 Wend MsgBox ("Proceso generado con éxito") Application.ScreenUpdating = True End Sub  
    • Ese error es porque no existe la hoja 10 con ese nombre, entonces cámbialo por FT-ADF-2558
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.