Executar o acesso Microsoft como uma tarefa agendada
Estou à procura de comentários sobre como agendar actualizações automáticas de uma base de dados (.accdb) uma vez que não estou muito confortável com o processo que criei.
actualmente, funciona como segue:
- o escalonador de Tarefas Chama a.bat
- .bat Chama a.vbs
- .o vbs abre a base de dados e chama uma macro
- a macro chama uma função (nível VBA)
- a função chama a sub-rotina de actualização
4 answers
Tanto quanto sei, o caminho mais curto para uma tarefa do Windows agendada para "fazer algo útil no acesso VBA" é:
Criar Uma Função Pública (não Sub) na base de dados. Por exemplo:
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
Crie uma Macro na base de dados para invocar a função:
Crie uma tarefa agendada para o Windows para invocar o MSACCESS.EXE com os parâmetros apropriados
Na janela acima os valores são:
Programa/Programa:
"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE"
Adicionar argumentos (opcional):
C:\Users\Public\schedTest.accdb /x DoSomething
Um script vbs pode chamar qualquer sub-rotina padrão de vba com o seguinte:
dim accessApp
set accessApp = createObject("Access.Application")
accessApp.OpenCurrentDataBase("C:\MyApp\MultiSelect.mdb")
accessApp.Run "TimeUpDate"
accessApp.Quit
set accessApp = nothing
Note que a sub-data é uma sub-rotina VBA padrão. Isto significa que não há marocrs autoexec, e não há macros em todas as chamadas sub VBA puras + este script vbs.
1) Crie um ficheiro em lote DOS com uma linha. A linha é composta por três partes a) o caminho completo para o Microsoft Access (msaccess.exe), b) the full path of the Microsoft Access database with the code in it, and c) the Access command line argument "/x MacroName". Os dois primeiros itens DEVEM SER rodeados de citações. O meu parece-se com isto.
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "C:\MyPrograms\ProdDB Reports\ProdDB Reports.accdb" /X DailyTestReportsRun
2) Criar uma macro dentro de Acesse com o nome que usou no seu ficheiro em lote. Ele tem um comando, RunCode
, com um argumento do nome de uma função VBA que você deseja chamar. Isto deve ser seguido por parêntesis aberto/fechado "()". Eu não tentei passar quaisquer parâmetros para a função; eu acho que isso seria problemático.
4) Certifique-se que a função VBA a que chama tem um comando Docmd.Quit
no final, ou que adiciona isto como uma segunda linha à sua macro. Estes irão certificar-se de que o acesso não fica aberto após o seu processo passa.
5) no escalonamento de Tarefas do Windows, seleccione "Criar uma tarefa básica" (que invoca um assistente). Defina o nome do programa como o nome do seu ficheiro em lote do DOS. Há uma opção útil chamada algo como "Abra a janela de propriedades quando eu terminar."Verifique isso para que você vá para a janela de propriedades.
6) Defina a tarefa a executar independentemente de o utilizador estar ligado ou não. Também assinale a opção" Executar com os privilégios mais elevados", qual dos amigos aqui afirmar.
Poderá agora testar tudo se carregar com o botão direito na tarefa agendada e seleccionar o comando Executar.
Gostei do guião do Albert Kallal e tentei. Correu tudo bem até eu tentar marcar. Então, por alguma razão misteriosa, o programador não o iniciaria.