Har du nogensinde ønsket at køre en adgangskode efter en automatisk tidsplan?
Jeg viser dig, hvordan du bruger en eksisterende Access-applikation til at køre og afslutte elegant, når den startes via Task Scheduler, mens du stadig præsenterer en venlig brugergrænseflade, når den startes af en slutbruger.
Nøglen til at få det til at fungere er /cmd
flag.
Send kommandolinjearg for at få adgang
For at sende et kommandolinjeargument for at få adgang, bruger du /cmd
kommandolinjeargument, når du starter din applikation:
Specificerer, at det, der følger på kommandolinjen, er den værdi, der returneres af Kommandoen fungere. Denne indstilling skal være den sidste kontakt på kommandolinjen. Du kan bruge et semikolon (;) som et alternativ til /cmd .
Brug denne switch til at angive et kommandolinjeargument, der kan bruges i Visual Basic for Applications (VBA)-kode
For at hente teksten sender du på kommandolinjen efter /cmd
argument, bruger du VBA.Command
fungere.
Du kan bruge denne funktion ved opstart til at omdirigere din kode til at udføre, hvad end den tilbagevendende opgave er.
Praktisk eksempel
- Opret en ny database
- Tilføj følgende kode til et nyt standardmodul:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Opret en ny makro
- Vælg "RunCode " fra rullemenuen "Tilføj ny handling"
- Indstil "Funktionsnavn" til
Startup()
- Luk og gem makroen som "AutoExec "
Kør som en normal bruger
For at teste applikationen som en normal bruger skal du blot komprimere og reparere databasen.
Du vil se en beskedboks, der siger "Start op."
Kør som en planlagt opgave
For at efterligne at køre som en planlagt opgave skal du lukke din database og starte den med følgende kommando:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
Access blinker kort på skærmen, så vil du se dialogboksen "Om Windows", og Access lukker sig selv.
Nogle noter
AutoExec
er en speciel makro, der kører automatisk ved opstart- Selvom
Startup()
rutinen returnerer ingen værdi, vi erklærer den som enFunction
fordi vi ikke direkte kan kalde enSub
fra en makro i Access - Ved normal brug springes cmd-vinduekoden over
- Jeg kalder eksplicit
Application.Quit
inde i min "Nightly" blok for at undgå, at adgang hænger på kode, der kræver brugerinteraktion (såsom MsgBox-koden i mit eksempel) - Jeg kalder altid
Trim()
omkringVBA.Command
funktion for at undgå fejl introduceret af indledende eller efterstillede mellemrum på kommandolinjen - Som et alternativ til
/cmd
, kan du også bruge/x
skift og giv den navnet på en tilpasset makro (Det gør jeg ikke, fordi jeg hader makroer med passionen fra tusinde hvide varme sole; de eneste to makroer, jeg nogensinde bruger, erAutoexec
ogAutokeys
fordi de giver særlig funktionalitet )
En sidste note om opgaveplanlæggeren og automatisering af andre Office-applikationer
Hvis din opgave ikke ser ud til at fungere, når du indstiller den til at køre natten over, så prøv at ændre den planlagte opgaveindstilling til "Kør kun, når brugeren er logget på."
Office-applikationer er ikke beregnet til at køre i, hvad Windows kalder "ikke-interaktiv" tilstand. Hvis du indstiller en planlagt opgave til "Kør uanset om brugeren er logget på eller ej", vil den opgave køre i ikke-interaktiv tilstand. Dette kan forårsage en række problemer, især hvis du automatiserer Excel som en del af den tilbagevendende proces.
Den enkleste løsning er at låse arbejdsstationen i stedet for at logge af og lade indstillingen være indstillet til "Kør kun, når brugeren er logget på."
Det er måske ikke praktisk i din situation, men det er en vigtig overvejelse at være opmærksom på. Betragt dig selv som advaret:
Microsoft anbefaler i øjeblikket ikke og understøtter ikke automatisering af Microsoft Office-applikationer fra nogen uovervåget, ikke-interaktiv klientapplikation eller -komponent