Alguma vez você já quis executar algum código de acesso em uma programação automática?
Mostrarei como usar um aplicativo existente do Access para executar e sair normalmente quando iniciado por meio do Agendador de Tarefas enquanto ainda apresenta uma interface de usuário amigável quando iniciado por um usuário final.
A chave para fazê-lo funcionar é o
/cmd
bandeira. Passando argumentos de linha de comando para acesso
Para passar um argumento de linha de comando para acessar, você usa o
/cmd
argumento de linha de comando ao iniciar seu aplicativo:Especifica que o que segue na linha de comando é o valor que será retornado pelo Comando função. Esta opção deve ser a última opção na linha de comando. Você pode usar um ponto e vírgula (;) como alternativa para /cmd .
Use esta opção para especificar um argumento de linha de comando que pode ser usado no código do Visual Basic for Applications (VBA)
Para recuperar o texto que você passa na linha de comando seguindo o
/cmd
argumento, você usa o VBA.Command
função. Você pode usar essa função na inicialização para redirecionar seu código para executar qualquer que seja a tarefa recorrente.
Exemplo prático
- Criar um novo banco de dados
- Adicione o seguinte código a um novo módulo padrão:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Criar uma nova macro
- Escolha "RunCode " na lista suspensa "Adicionar nova ação"
- Defina "Nome da função" como
Startup()
- Feche e salve a macro como "AutoExec "
Executar como usuário normal
Para testar o aplicativo como um usuário normal, basta compactar e reparar o banco de dados.
Você verá uma caixa de mensagem que diz:"Iniciar".
Executar como uma tarefa agendada
Para simular a execução como uma tarefa agendada, feche seu banco de dados e inicie-o com o seguinte comando:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
O Access piscará brevemente na tela, então você verá a caixa de diálogo "Sobre o Windows" e o Access fechará sozinho.
Algumas notas
AutoExec
é uma macro especial que é executada automaticamente na inicialização- Mesmo que o
Startup()
rotina não retorna nenhum valor, nós a declaramos como umaFunction
porque não podemos chamar diretamente umSub
de uma macro no Access - Em uso normal, o código da janela cmd é ignorado
- Chamo explicitamente
Application.Quit
dentro do meu bloco "Nightly" para evitar o acesso travado no código que requer interação do usuário (como o código MsgBox no meu exemplo) - Sempre chamo
Trim()
em torno doVBA.Command
função para evitar erros introduzidos por espaços em branco iniciais ou finais na linha de comando - Como alternativa a
/cmd
, você também pode usar o/x
mudar e passar o nome de uma macro personalizada (não faço isso porque odeio macros com a paixão de mil sóis brancos quentes; as únicas duas macros que uso sãoAutoexec
eAutokeys
porque eles fornecem funcionalidades especiais )
Uma nota final sobre o Agendador de tarefas e a automação de outros aplicativos do Office
Se sua tarefa parece não estar funcionando quando você a configura para ser executada durante a noite, tente alternar a opção de tarefa agendada para "Executar somente quando o usuário estiver conectado".
Os aplicativos do Office não devem ser executados no que o Windows chama de modo "não interativo". Se você definir uma tarefa agendada como "Executar se o usuário estiver conectado ou não", essa tarefa será executada no modo não interativo. Isso pode causar vários problemas, especialmente se você estiver automatizando o Excel como parte do processo recorrente.
A solução mais simples é bloquear a estação de trabalho em vez de efetuar logoff e deixar a opção definida como "Executar somente quando o usuário estiver conectado".
Isso pode não ser prático na sua situação, mas é uma consideração importante a ser considerada. Considere-se avisado:
Atualmente, a Microsoft não recomenda e não oferece suporte à automação de aplicativos do Microsoft Office de qualquer aplicativo ou componente cliente autônomo e não interativo