Access
 sql >> Base de données >  >> RDS >> Access

COMMENT :exécuter des tâches planifiées avec Microsoft Access

Avez-vous déjà voulu exécuter un code d'accès selon un calendrier automatique ?

Je vais vous montrer comment utiliser une application Access existante pour s'exécuter et se fermer correctement lorsqu'elle est lancée via le Planificateur de tâches tout en présentant une interface utilisateur conviviale lorsqu'elle est lancée par un utilisateur final.

La clé pour le faire fonctionner est le /cmd drapeau.

Passer des arguments de ligne de commande à Access

Pour passer un argument de ligne de commande pour accéder, vous utilisez le /cmd argument de la ligne de commande lors du lancement de votre application :

Spécifie que ce qui suit sur la ligne de commande est la valeur qui sera renvoyée par la Command une fonction. Cette option doit être le dernier commutateur sur la ligne de commande. Vous pouvez utiliser un point-virgule (;) comme alternative à /cmd .

Utilisez ce commutateur pour spécifier un argument de ligne de commande qui peut être utilisé dans le code Visual Basic pour Applications (VBA)

Pour récupérer le texte que vous passez sur la ligne de commande après le /cmd argument, vous utilisez le VBA.Command une fonction.

Vous pouvez utiliser cette fonction au démarrage pour rediriger votre code afin d'effectuer quelle que soit la tâche récurrente.

Exemple pratique

  1. Créer une nouvelle base de données
  2. Ajoutez le code suivant à un nouveau module standard :
Public Function Startup()
    
    If Trim(VBA.Command) = "Nightly" Then
        Shell "winver", vbNormalFocus
        Application.Quit
    End If
    MsgBox "Start up"
   
End Function
  1. Créer une nouvelle macro
  2. Choisissez "Exécuter le code " dans le menu déroulant "Ajouter une nouvelle action"
  3. Définissez "Nom de la fonction" sur Startup()
  4. Fermez et enregistrez la macro sous "AutoExec "

Exécuter en tant qu'utilisateur normal

Pour tester l'application en tant qu'utilisateur normal, il vous suffit de compacter et de réparer la base de données.

Vous verrez une boîte de message indiquant "Démarrer".

Exécuter en tant que tâche planifiée

Pour imiter l'exécution en tant que tâche planifiée, fermez votre base de données et lancez-la avec la commande suivante :

"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly

Access clignotera brièvement à l'écran, puis vous verrez la boîte de dialogue "À propos de Windows" et Access se fermera de lui-même.

Quelques remarques

  • AutoExec est une macro spéciale qui s'exécute automatiquement au démarrage
  • Même si le Startup() la routine ne renvoie aucune valeur, nous la déclarons comme une Function car nous ne pouvons pas appeler directement un Sub à partir d'une macro dans Access
  • Dans des conditions normales d'utilisation, le code de la fenêtre cmd est ignoré
  • J'appelle explicitement Application.Quit à l'intérieur de mon bloc "Nightly" pour éviter que Access ne se bloque sur du code qui nécessite une interaction de l'utilisateur (comme le code MsgBox dans mon exemple)
  • J'appelle toujours Trim() autour du VBA.Command fonction pour éviter les bogues introduits par des espaces blancs de début ou de fin sur la ligne de commande
  • Comme alternative à /cmd , vous pouvez également utiliser le /x changez et transmettez-lui le nom d'une macro personnalisée (Je ne fais pas ça parce que je déteste les macros avec la passion d'un millier de soleils blancs ; les deux seules macros que j'utilise jamais sont Autoexec et Autokeys car ils offrent des fonctionnalités spéciales )

Une note finale sur le planificateur de tâches et l'automatisation d'autres applications bureautiques

Si votre tâche ne semble pas fonctionner lorsque vous la configurez pour qu'elle s'exécute pendant la nuit, essayez de basculer l'option de tâche planifiée sur "Exécuter uniquement lorsque l'utilisateur est connecté".

Les applications Office ne sont pas destinées à s'exécuter dans ce que Windows appelle le mode "non interactif". Si vous définissez une tâche planifiée sur "Exécuter si l'utilisateur est connecté ou non", cette tâche s'exécutera en mode non interactif. Cela peut entraîner divers problèmes, en particulier si vous automatisez Excel dans le cadre du processus récurrent.

La solution la plus simple consiste à verrouiller le poste de travail au lieu de se déconnecter et à laisser l'option définie sur "Exécuter uniquement lorsque l'utilisateur est connecté".

Ce n'est peut-être pas pratique dans votre situation, mais c'est une considération importante dont il faut être conscient. Considérez-vous averti :

Microsoft ne recommande pas actuellement et ne prend pas en charge l'automatisation des applications Microsoft Office à partir d'une application ou d'un composant client sans surveillance et non interactif