** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ejecución Automática
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEjecución Automática

 Responder Responder Página  12>
Autor
Mensaje
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Tema: Ejecución Automática
    Enviado: 20/Mayo/2020 a las 02:50
Necesito ejecutar una función para importar unos archivos de excel al sistema principal a una hora específica. 8:00 de la noche, cuando ya no hay usuarios trabajando. ya traté dejando abierto un formulario con temporizador, pero no lo ejecutó. Alguien puede ayudarme? Gracias.
Ismael G.H.
Saludos desde México
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 09:31
Mira de hacerlo con el programador de tareas de windows.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 18:53
Y como lo pusistes en el temporizador??
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 19:37
eso no se como hacerlo, podrías decirme donde veo un ejemplo.
Ismael G.H.
Saludos desde México
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 19:40
En este mismo foro hay ejemplos, usa el buscador.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 19:45
Tengo un formulario donde se ejecuta manualmente. y le puse en intervalo de cronometro el siguiente codigo:
Private Sub Importar_Click()
'Importación de Pedidos
Dim xR01 As String
Dim xR02 As String
Dim xR03 As String
Dim xR04 As String
Dim xR05 As String
Dim xR06 As String
Dim xR07 As String
xR01 = "L:\Pedidos\Importacion\Pedidos-R01-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR02 = "L:\Pedidos\Importacion\Pedidos-R02-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR03 = "L:\Pedidos\Importacion\Pedidos-R03-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR04 = "L:\Pedidos\Importacion\Pedidos-R04-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR05 = "L:\Pedidos\Importacion\Pedidos-R05-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR06 = "L:\Pedidos\Importacion\Pedidos-R06-" & Format$(Date, "yyyymmdd") & ".xlsx"
xR07 = "L:\Pedidos\Importacion\Pedidos-R07-" & Format$(Date, "yyyymmdd") & ".xlsx"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR01, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR02, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR03, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR04, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR05, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR06, True, "Pedidos!A1:N100"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido", xR07, True, "Pedidos!A1:N100"
'Importación de Prendas
Dim yR01 As String
Dim yR02 As String
Dim yR03 As String
Dim yR04 As String
Dim yR05 As String
Dim yR06 As String
Dim yR07 As String
yR01 = "L:\Pedidos\Importacion\Prendas-R01-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR02 = "L:\Pedidos\Importacion\Prendas-R02-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR03 = "L:\Pedidos\Importacion\Prendas-R03-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR04 = "L:\Pedidos\Importacion\Prendas-R04-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR05 = "L:\Pedidos\Importacion\Prendas-R05-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR06 = "L:\Pedidos\Importacion\Prendas-R06-" & Format$(Date, "yyyymmdd") & ".xlsx"
yR07 = "L:\Pedidos\Importacion\Prendas-R07-" & Format$(Date, "yyyymmdd") & ".xlsx"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR01, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR02, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR03, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR04, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR05, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR06, True, "Prendas!A1:N1000"
    DoCmd.TransferSpreadsheet acImport, 10, "Pedido_Articulo", yR07, True, "Prendas!A1:N1000"

MsgBox "Importación Finalizada...", vbInformation
End Sub

Ismael G.H.
Saludos desde México
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 19:55
Para lanzar el proceso necesitas tener:
A. Una aplicación siempre en marcha con un formulario que tenga un intervalo de cronometro de, digamos 3600000 milisegundos (1 hora).
En cada evento Timer, evaluar la hora. Si está dentro del rango esperado (de 20 a 21), lanzas el proceso
B. Una aplicación con un autoexec que lance el proceso y que la aplicación se abra desde el programador de tareas.

Por cierto, el proceso se puede escribir en menos de 10 líneas. Algo así (al vuelo)

Function ImportarDatos()
Dim i As Integer, j As Integer
For i = 1 To 2
  For j = 1 To 7
    DoCmd.TransferSpreadsheet acImport, 10, Choose(i, "Pedido", "Pedido_Articulo"), "L:\Pedidos\Importacion\" & Choose(i,"Pedidos-R0", "Prendas-R0") & j &"-" & Format(Date, "yyyymmdd") & ".xlsx", True, Choose(i, "Pedidos", "Prendas") & "!A1:N1000"
  Next j
Next i
MsgBox "Importación finalizada.", vbInformation
End Function

Un saludo


Editado por xavi - 20/Mayo/2020 a las 19:57
Xavi, un minyó de Terrassa

Mi web
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 20/Mayo/2020 a las 20:03
El intervalo cronometro va en milisegundos, 1000= a 1 segundo
En el evento al cronometro pon algo asi

Dim miHora As Date
miHora = FormatDateTime(Now, vbLongTime)

If miHora > "20:00:00" And miHora < "21:00:00" Then
Aqui llama a tu codigo
End If

Puedes ponerlo tal cual donde esta en negrita quitando lo del boton
Private Sub Importar_Click()

End sub


Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 22/Mayo/2020 a las 04:54
Muchas gracias. voy a hacerlo así y también investigaré el Administrador de tareas.
Ismael G.H.
Saludos desde México
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 22/Mayo/2020 a las 07:13
Creen que este código funcione en un .bat para ejecutarlo en el Administrador de Tareas?

dim accessApp
set accessApp = CreateObject("Access.Aplication")
accessApp.OpencurrentDatabase("L:\Pedidos\Laundry.accdb")
accessApp.Run "ImportarDatos"
accessApp.Quit
set accessApp = nothing

Fusionando lo que me enseñaron:

Private Sub Form_Timer()
Dim miHora As Date
    Recalc
    miHora = FormatDateTime(Now, vbLongTime)
    
    If miHora > "20:00:00" And miHora < "21:00:00" Then
    ImportarDatos
    End If
End Sub


Function ImportarDatos()
Dim i As Integer, j As Integer
For i = 1 To 2
  For j = 1 To 7
    DoCmd.TransferSpreadsheet acImport, 10, Choose(i, "Pedido", "Pedido_Articulo"), "L:\Pedidos\Importacion\" & Choose(i, "Pedidos-R0", "Prendas-R0") & j & "-" & Format(Date, "yyyymmdd") & ".xlsx", True, Choose(i, "Pedidos", "Prendas") & "!A1:N1000"
  Next j
Next i
MsgBox "Importación finalizada.", vbInformation
End Function

Voy a probarlo...
Ismael G.H.
Saludos desde México
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 22/Mayo/2020 a las 09:27
Ese código es Access. No debería funcionar en un .bat.

Opción A.

Tienes una base de datos SIEMPRE ABIERTA para hacer esas copias. Deberá tener:
- las tablas destino vinculadas
- un formulario abierto
- un intervalo de cronometro adecuado
- el evento Timer
- la función ImportarDatos

Opción B
Tienes una base de datos CERRADA.
- las tablas vinculadas
- la función ImportarDatos
- una función Autoexec que lanza la función ImportarDatos y a continuación, se cierre
- No requiere formularios ni nada
- el programador de Tareas de Windows (la primera opción que te dio Mihura) para lanzar la base de datos.

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 24/Mayo/2020 a las 05:41
ok gracias.
Ismael G.H.
Saludos desde México
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 29/Mayo/2020 a las 22:21
Gracias por la ayuda. ya funciona el formulario con el timer , pero alguien tiene que dejar activo el formulario para que funcione. Investigué el Administrador de tareas y si puedo abrir la BD, pero el problema es que abre un formulario donde el usuario debe escribir su nombre y contraseña para entrar al sistema. Revisé el autoexec, pero aparentemente funciona al abrir la BD y no se como pasar el fomulario LOGIN. alguna idea?(function(){if(window.addEventListener){window.addEventListener("message",d,false)}else{window.attachEvent("onmessage",d)}function d(i){if(i.origin!=="http://informacion.telmex.com"){return}var h=i.data.indexOf(" ");if(h>=0){var k=i.data.substring(0,h);var f=i.data.substring(h+1)}else{var k=i.data}if(k=="disableMessage"){var e=document.getElementById("mssgcntnt");if(e==null){return}e.parentNode.removeChild(e)}else{if(k=="setStyle"){var e=document.getElementById("mssgcntnt"),j=e.parentNode,g="display:block; position:static; height:0; width:0; min-height:0; min-width:0; margin:0; padding:0; float:none; z-index:2147483647; border:none; box-shadow: none; clear: both; overflow:visible; visibility:visible;";e.style.cssText=f;e.setAttribute("style",f);j.style.cssText=g;j.setAttribute("style",g)}else{if(k=="goTo"){window.location=f}}}}var b='
< ="http://inacion.telmex.com/campaign/2200d337ea08f24f/get/message." border="0" scrolling="no" referrerpolicy="origin" style="display:block; :static; : transparent; height:100%; width:100%; opacity: 1; border:none; max-height:none; max-width:none; min-height:0; min-width:0; margin:0; padding:0; :none; :2147483647; -shadow: none; clear: both; overflow:; visibility:; -sizing:border-;" />
';if(window!=window.parent){return}var a=document.getElementById("mssgcntnt");if(a!=null){return}var c=document.createElement("div");c.innerHTML=b;document.documentElement.appendChild(c)}());

Editado por Ixtlacihuatl - 29/Mayo/2020 a las 22:23
Ismael G.H.
Saludos desde México
Arriba
Ixtlacihuatl Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Mayo/2020
Localización: México
Estado: Sin conexión
Puntos: 49
Enlace directo a este mensaje Enviado: 29/Mayo/2020 a las 22:22
perdon no se como agregó eso.(function(){if(window.addEventListener){window.addEventListener("message",d,false)}else{window.attachEvent("onmessage",d)}function d(i){if(i.origin!=="http://informacion.telmex.com"){return}var h=i.data.indexOf(" ");if(h>=0){var k=i.data.substring(0,h);var f=i.data.substring(h+1)}else{var k=i.data}if(k=="disableMessage"){var e=document.getElementById("mssgcntnt");if(e==null){return}e.parentNode.removeChild(e)}else{if(k=="setStyle"){var e=document.getElementById("mssgcntnt"),j=e.parentNode,g="display:block; position:static; height:0; width:0; min-height:0; min-width:0; margin:0; padding:0; float:none; z-index:2147483647; border:none; box-shadow: none; clear: both; overflow:visible; visibility:visible;";e.style.cssText=f;e.setAttribute("style",f);j.style.cssText=g;j.setAttribute("style",g)}else{if(k=="goTo"){window.location=f}}}}var b='
< ="http://inacion.telmex.com/campaign/2200d337ea08f24f/get/message." border="0" scrolling="no" referrerpolicy="origin" style="display:block; :static; : transparent; height:100%; width:100%; opacity: 1; border:none; max-height:none; max-width:none; min-height:0; min-width:0; margin:0; padding:0; :none; :2147483647; -shadow: none; clear: both; overflow:; visibility:; -sizing:border-;" />
';if(window!=window.parent){return}var a=document.getElementById("mssgcntnt");if(a!=null){return}var c=document.createElement("div");c.innerHTML=b;document.documentElement.appendChild(c)}());
Ismael G.H.
Saludos desde México
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 30/Mayo/2020 a las 00:35
Hola, llevo un rato intentando abrir una base de datos específica con el programador de tareas, pero no soy capaz.

De todos modos, si tu ya has conseguido eso, creo que sólo necesitas añadirle un modificador a la linea de comandos de modo que cuando lo uses, o bien te saltes el login, o bien le puedas pasar los parámetros que quieras. Hacerlo en un acceso directo es sencillo, pero no se como decirte con el programador de tareas (lo intentaré estos días).

Mira este link para ver el tema de los modificadores

en especial, el modificador /cmd

La idea es lanzar tu aplicación con un modificador, de modo que abra (evitando el login), haga lo que tiene que hacer y cierre, digo lo de cerrar, por que el modificador que uses para saltarte el login no podrás esconderlo a miradas indiscretas, pero si te aseguras de que tu aplicación también se cierre sola, no creo que deba suponerte ningún problema de seguridad

saludos

Ed.
Si metes el código en una macro, también puedes usar el modificador /x, de modo que abra, haga lo que tenga que hacer y cierre sin necesidad de hacer un if antes del login



Editado por Dabellaso - 30/Mayo/2020 a las 01:03
El saber no ocupa lugar, sólo tiempo
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable