Hai mai desiderato eseguire del codice di accesso in base a una pianificazione automatica?
Ti mostrerò come utilizzare un'applicazione di Access esistente per eseguire e uscire con grazia quando viene avviata tramite l'Utilità di pianificazione, pur presentando un'interfaccia utente intuitiva quando viene avviata da un utente finale.
La chiave per farlo funzionare è il /cmd
bandiera.
Passare argomenti della riga di comando per accedere
Per passare un argomento della riga di comando per l'accesso, utilizzare il /cmd
argomento della riga di comando all'avvio dell'applicazione:
Specifica che ciò che segue sulla riga di comando è il valore che verrà restituito dal Comando funzione. Questa opzione deve essere l'ultima opzione sulla riga di comando. Puoi utilizzare un punto e virgola (;) come alternativa a /cmd .
Utilizzare questa opzione per specificare un argomento della riga di comando che può essere utilizzato nel codice di Visual Basic, Applications Edition (VBA)
Per recuperare il testo che passi sulla riga di comando seguendo il /cmd
argomento, usi il VBA.Command
funzione.
È possibile utilizzare questa funzione all'avvio per reindirizzare il codice per eseguire qualunque sia l'attività ricorrente.
Esempio pratico
- Crea un nuovo database
- Aggiungi il seguente codice a un nuovo modulo standard:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Crea una nuova macro
- Scegli "RunCode " dal menu a discesa "Aggiungi nuova azione"
- Imposta "Nome funzione" su
Startup()
- Chiudi e salva la macro come "AutoExec "
Esegui come utente normale
Per testare l'applicazione come utente normale, è sufficiente compattare e riparare il database.
Verrà visualizzata una finestra di messaggio che dice "Avvia".
Esegui come attività pianificata
Per simulare l'esecuzione come un'attività pianificata, chiudi il database e avvialo con il seguente comando:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
Access lampeggerà brevemente sullo schermo, quindi vedrai la finestra di dialogo "Informazioni su Windows" e Access si chiuderà automaticamente.
Alcune note
AutoExec
è una macro speciale che viene eseguita automaticamente all'avvio- Anche se
Startup()
routine non restituisce alcun valore, lo dichiariamo comeFunction
perché non possiamo chiamare direttamente unSub
da una macro in Access - In condizioni di utilizzo normale, il codice della finestra di cmd viene ignorato
- Chiamo esplicitamente
Application.Quit
all'interno del mio blocco "Nightly" per evitare che l'accesso si blocchi sul codice che richiede l'interazione dell'utente (come il codice MsgBox nel mio esempio) - Chiamo sempre
Trim()
intorno alVBA.Command
funzione per evitare bug introdotti da spazi bianchi iniziali o finali sulla riga di comando - In alternativa a
/cmd
, puoi anche usare il/x
cambia e passagli il nome di una macro personalizzata (Non lo faccio perché odio le macro con la passione di mille bianchi ardenti; le uniche due macro che uso sonoAutoexec
eAutokeys
perché forniscono funzionalità speciali )
Una nota finale sull'Utilità di pianificazione e sull'automazione di altre applicazioni di Office
Se la tua attività sembra non funzionare quando la imposti per essere eseguita durante la notte, prova a cambiare l'opzione dell'attività pianificata su "Esegui solo quando l'utente è connesso".
Le applicazioni di Office non devono essere eseguite in quella che Windows chiama la modalità "non interattiva". Se imposti un'attività pianificata su "Esegui indipendentemente dal fatto che l'utente sia connesso o meno", tale attività verrà eseguita in modalità non interattiva. Ciò può causare una serie di problemi, soprattutto se stai automatizzando Excel come parte del processo ricorrente.
La soluzione più semplice è bloccare la workstation invece di disconnettersi e lasciare l'opzione impostata su "Esegui solo quando l'utente è connesso".
Potrebbe non essere pratico nella tua situazione, ma è una considerazione importante di cui essere consapevoli. Considerati avvisato:
Microsoft attualmente non consiglia e non supporta l'automazione delle applicazioni di Microsoft Office da qualsiasi applicazione o componente client non presidiato e non interattivo