Ejecutar Microsoft Access como una tarea progtwigda

Estoy buscando comentarios sobre cómo progtwigr actualizaciones automáticas de una base de datos (.accdb) ya que no estoy muy cómodo con el proceso que he configurado.

Actualmente, funciona de la siguiente manera:

  1. El Progtwigdor de tareas llama a .bat
  2. .bat llama a .vbs
  3. .vbs abre la base de datos y llama a una macro
  4. La macro llama a una función (Nivel VBA)
  5. La función llama a la subrutina de actualización

Considero que hay demasiados pasos y el hecho de que requiere 2 archivos externos (.Bat y .vbs) relacionados con la base de datos y almacenados en el sistema aumenta el riesgo de que se rompa el procedimiento.

Aparentemente (pero dime que estoy equivocado y cómo puedo cambiarlo) .vbs no puede llamar a una subrutina, sino solo a una macro. De forma idéntica, una macro de acceso no puede llamar a una subrutina sino solo a una función si el usuario espera ingresar al entorno VB de la base de datos. Esta es la razón por la que llamé a una función (Nivel VBA) que luego llama a la subrutina.

Espero que algunos de ustedes sepan cómo acortar los pasos y, finalmente, obtener paseo de .bat y .vbs

Que yo sepa, el camino más corto para una tarea progtwigda de Windows para “hacer algo útil en Access VBA” es:

Cree una Función Pública (no Sub) en la base de datos. Por ejemplo:

 Option Compare Database Option Explicit Public Function WriteToTable1() Dim cdb As DAO.Database Set cdb = CurrentDb cdb.Execute "INSERT INTO Table1 (textCol) VALUES ('sched test')", dbFailOnError Set cdb = Nothing Application.Quit End Function 

Cree una macro en la base de datos para invocar la función:

Macro.png

Cree una tarea progtwigda de Windows para invocar MSACCESS.EXE con los parámetros apropiados

SchedTask.png

En el cuadro de diálogo de arriba, los valores son:

Progtwig / script:

 "C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE" 

Agregar argumentos (opcional) :

 C:\Users\Public\schedTest.accdb /x DoSomething 

Hay un pequeño truco conocido que se remonta a los primeros años de acceso para permitir que se ejecute como un proceso que aún funciona. El acceso siempre al inicio buscará una macro llamada “Autoexec”. Si lo encuentra, inmediatamente comenzará a ejecutar esta macro. Encuentro que esto es extremadamente útil si necesito inicializar el progtwig antes de abrir formularios o, como en el caso del cuestionario original, ejecutar el acceso como un proceso progtwigdo sin E / S del usuario.

Un script vbs puede llamar a cualquier vba SUBROUTINE estándar con lo siguiente:

 dim accessApp set accessApp = createObject("Access.Application") accessApp.OpenCurrentDataBase("C:\MyApp\MultiSelect.mdb") accessApp.Run "TimeUpDate" accessApp.Quit set accessApp = nothing 

Tenga en cuenta que el sub TimeUpDate es una subrutina VBA estándar. Esto significa que no hay maroc autoexec, y no hay macros en absoluto, solo sub llamadas VBA puras + este script vbs.

Después de golpear mi cabeza contra la pared durante aproximadamente cuatro horas, finalmente conseguí que esto funcionara:

1) Cree un archivo por lotes DOS con una línea. La línea se compone de tres partes a) la ruta completa a Microsoft Access (msaccess.exe), b) la ruta completa de la base de datos de Microsoft Access con el código en ella, yc) el argumento de línea de comando de Access “/ x MacroName” . Los dos primeros elementos deben estar rodeados de comillas. El mío se ve así:

 "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "C:\MyPrograms\ProdDB Reports\ProdDB Reports.accdb" /X DailyTestReportsRun 

2) Cree una macro dentro de Access con el nombre que utilizó en su archivo por lotes. Tiene un comando, RunCode , con un argumento del nombre de una función VBA a la que desea llamar. Esto debe ser seguido por abrir / cerrar paréntesis “()”. No intenté pasar ningún parámetro a la función; Creo que esto sería problemático.

4) Asegúrese de que la función VBA que llama tiene un comando Docmd.Quit al final, o que lo agrega como una segunda línea a su macro. Esto asegurará que Access no permanezca abierto después de que se ejecute su proceso.

5) En el Progtwigdor de tareas de Windows, seleccione “crear una tarea básica” (que invoca un asistente). Establezca el nombre del progtwig en el nombre de su archivo por lotes DOS. Hay una checkbox útil etiquetada como “Abra la ventana de propiedades cuando haya terminado”. Verifique eso para que vaya a la ventana de propiedades.

6) Configure la tarea para ejecutar independientemente de si el usuario ha iniciado sesión o no. También consulte la casilla “Ejecutar con los privilegios más altos”, que un amigo sugirió aquí.

Ahora puede probar todo haciendo clic con el botón derecho en la tarea progtwigda y seleccionando el comando Ejecutar.

Me gustó el guión de Albert Kallal y lo probé. Todo funcionó de maravilla hasta que intenté progtwigrlo. Entonces, por alguna misteriosa razón, el progtwigdor no lo patearía.