Heb je ooit een toegangscode volgens een automatisch schema willen uitvoeren?
Ik laat je zien hoe je een bestaande Access-toepassing kunt gebruiken om gracieus uit te voeren en af te sluiten wanneer deze wordt gestart via Taakplanner, terwijl je nog steeds een gebruiksvriendelijke gebruikersinterface presenteert wanneer deze door een eindgebruiker wordt gestart.
De sleutel om het te laten werken is de /cmd
vlag.
Opdrachtregelargs doorgeven voor toegang
Om een opdrachtregelargument door te geven om toegang te krijgen, gebruik je de /cmd
opdrachtregelargument bij het starten van uw toepassing:
Geeft aan dat wat volgt op de opdrachtregel de waarde is die wordt geretourneerd door de Opdracht functie. Deze optie moet de laatste schakelaar op de opdrachtregel zijn. U kunt een puntkomma (;) gebruiken als alternatief voor /cmd .
Gebruik deze schakeloptie om een opdrachtregelargument op te geven dat kan worden gebruikt in Visual Basic for Applications (VBA)-code
Om de tekst op te halen, geeft u deze door op de opdrachtregel na de /cmd
argument, gebruik je de VBA.Command
functie.
U kunt deze functie bij het opstarten gebruiken om uw code om te leiden om de terugkerende taak uit te voeren.
Praktisch voorbeeld
- Maak een nieuwe database
- Voeg de volgende code toe aan een nieuwe standaardmodule:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Maak een nieuwe macro
- Kies "RunCode " uit de vervolgkeuzelijst "Nieuwe actie toevoegen"
- Stel "Functienaam" in op
Startup()
- Sluit en sla de macro op als "AutoExec "
Uitvoeren als een normale gebruiker
Om de applicatie als een normale gebruiker te testen, comprimeert en repareert u eenvoudig de database.
U ziet een berichtvenster met de tekst 'Opstarten'.
Uitvoeren als een geplande taak
Om het uitvoeren van een geplande taak na te bootsen, sluit u uw database en start u deze met het volgende commando:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
Access knippert kort op het scherm, daarna ziet u het dialoogvenster "Over Windows" en sluit Access zichzelf af.
Enkele opmerkingen
AutoExec
is een speciale macro die automatisch wordt uitgevoerd bij het opstarten- Hoewel de
Startup()
routine retourneert geen waarde, we declareren het als eenFunction
omdat we eenSub
. niet rechtstreeks kunnen bellen van een macro in Access - Bij normaal gebruik wordt de cmd-venstercode overgeslagen
- Ik bel expliciet
Application.Quit
in mijn "Nightly" -blok om te voorkomen dat Access vastloopt op code die gebruikersinteractie vereist (zoals de MsgBox-code in mijn voorbeeld) - Ik bel altijd
Trim()
rond deVBA.Command
functie om bugs te voorkomen die worden geïntroduceerd door voorloop- of volgspaties op de opdrachtregel - Als alternatief voor
/cmd
, kunt u ook de/x
. gebruiken switch en geef het de naam van een aangepaste macro door (Ik doe dat niet omdat ik macro's haat met de passie van duizend witte hete zonnen; de enige twee macro's die ik ooit gebruik zijnAutoexec
enAutokeys
omdat ze speciale functionaliteit bieden )
Een laatste opmerking over de taakplanner en het automatiseren van andere kantoortoepassingen
Als uw taak niet lijkt te werken wanneer u deze instelt om 's nachts te worden uitgevoerd, probeer dan de geplande taakoptie om te schakelen naar "Alleen uitvoeren wanneer gebruiker is aangemeld".
Office-toepassingen zijn niet bedoeld om te draaien in wat Windows de "niet-interactieve" modus noemt. Als u een geplande taak instelt op "Uitvoeren of de gebruiker is aangemeld of niet", wordt die taak in niet-interactieve modus uitgevoerd. Dit kan verschillende problemen veroorzaken, vooral als u Excel automatiseert als onderdeel van het terugkerende proces.
De eenvoudigste oplossing is om het werkstation te vergrendelen in plaats van uit te loggen en de optie op "Alleen uitvoeren wanneer gebruiker is aangemeld" te laten staan.
Dat is misschien niet praktisch in uw situatie, maar het is een belangrijke overweging om op te letten. Beschouw jezelf als gewaarschuwd:
Microsoft beveelt momenteel geen automatisering van Microsoft Office-applicaties aan en ondersteunt deze niet vanuit een onbeheerde, niet-interactieve clientapplicatie of component