L'exécution de Microsoft Access en tant que Tâche Planifiée
Je suis à la recherche de commentaires sur la façon de planifier des mises à jour automatiques de la base de données.accdb) depuis que je ne suis pas très à l'aise avec le processus que j'ai mis en place.
Actuellement, il fonctionne comme suit:
- Planificateur de tâches appelle une .chauve-souris
- .chauve-souris appels un .vbs
- .vbs ouvre la base de données et appelle une macro
- La macro appelle une fonction VBA (Niveau)
- Les appels de fonction de la mise à jour de la sous-Routine
Je considère il y a trop d'étapes, et le fait qu'elle nécessite 2 fichiers externes (.Chauve-souris et .vbs) liées à la base de données et stockées sur le système accroître le risque que la procédure de rupture.
Apparemment (mais s'il vous plaît dites-moi que je me trompe et comment je peux le changer) .vbs ne peut pas appeler une sous-routine, mais seulement une macro. De manière identique, un accès macro ne peut pas appeler une sous-routine, mais seulement une fonction si l'utilisateur s'attend à entrer dans le VB de l'environnement de la base de données. C'est la raison pour laquelle j'ai appelé une fonction (VBA), puis appelle la sous-routine.
Espère que certains d'entre vous savent comment raccourcir les étapes et, éventuellement, obtenir de la sortie .chauve-souris et .vbs
.bat
ou votre .vbs
script rien de plus que d'une seule ligne de code? Si non, alors vous avez probablement pu simplement mettre à jour votre Tâche Planifiée pour s'exécuter MSACCESS.EXE
avec les paramètres requis. (2) Oui, une Macro dans Access ne peut invoquer une Fonction, mais vous pourriez probablement convertir vos Sous pour une Fonction qui ne retourne rien (ou certains retours valeur arbitraire comme True
).J'ai essayé d'appeler MSACCESS.EXE dans le Planificateur de Tâches, mais je n'a pas réussi et c'est la raison pour laquelle j'ai utilisé le .chauve-souris .vbs méthode. Essayez à nouveau. Je supopose j'ai besoin d'avoir un minuteur dans l'Accès alors que les déclencheurs de la mise à jour...
Non, vous appeler MSACCESS.EXE avec le
-x
commutateur de ligne de commande et le nom de la macro que vous souhaitez exécuter. Détails ici.Grâce Gord - comme dirait ma .chauve-souris et .vbs scipts sont sur le point de disparaître 🙂
vbs peut certainement appeler un standard VBA sous-routine, et en fait j'ai du mal à comprendre d'une autre façon. En conséquence, vous devriez SEULEMENT besoin d'un script vbs. J'ai posté une réponse à cette question.
OriginalL'auteur ProtoVB | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Au meilleur de ma connaissance, le chemin le plus court pour une Tâche Planifiée de Windows pour "faire quelque chose d'utile dans Access VBA" est:
Créer une Fonction Publique (pas de Sous) dans la base de données. Par exemple:
Créer une Macro dans la base de données pour appeler la fonction:
Créer une Tâche Planifiée de Windows pour invoquer MSACCESS.EXE avec les paramètres appropriés
Au-dessus de la boîte de dialogue valeurs sont:
Programme/script:
Ajouter des arguments
(facultatif):OriginalL'auteur Gord Thompson
Il est peu connu truc datant des premières années de l'accès à la laisser fonctionner comme un processus qui fonctionne toujours. L'accès sera toujours au démarrage recherchez une macro appelée "Autoexec". S'il le trouve, il va immédiatement commencer l'exécution de cette macro. Je trouve que c'est extrêmement utile si j'ai besoin d'initialiser le programme avant l'ouverture de formulaires ou, comme dans le cas de l'original de l'interlocuteur, exécutez l'accès comme un processus planifié sans que l'utilisateur I/O.
OriginalL'auteur Andrew Thackray
Un script vbs pouvez appeler n'importe quel standard vba sous-ROUTINE avec les éléments suivants:
Noter que le sous TimeUpDate est une norme VBA sous-routine. Cela signifie pas de autoexec marocrs, et pas de macros à tous - que pure VBA sous les appels + ce script vbs.
OriginalL'auteur Albert D. Kallal
Après avoir battu ma tête contre le mur pendant environ quatre heures, j'ai finalement obtenu ce travail:
1) Créer un fichier batch DOS avec une seule ligne. La ligne est composée de trois parties a) le chemin d'accès complet pour Microsoft Access (msaccess.exe), b) le chemin complet de la base de données Microsoft Access avec le code, et c) l'Accès argument de ligne de commande "/x MacroName". Les deux premiers éléments devraient être entourés par des guillemets. Le mien ressemble à ça:
2) Créer une macro à l'intérieur d'Accès avec le nom que vous avez utilisé dans votre fichier de commandes. Il a une commande,
RunCode
, avec un argument le nom d'une fonction VBA que vous souhaitez appeler. Ce qui devrait être suivie par l'ouverture/fermeture de parenthèses "()". Je n'ai pas essayer de passer des paramètres à la fonction; je pense que ce serait problématique.4) assurez-vous que la fonction VBA vous appel a une
Docmd.Quit
commande à la fin, ou que vous l'ajouter comme une deuxième ligne à votre macro. Ces assurez-vous que l'Accès n'est pas ouvert après votre processus s'exécute.5) Dans le Planificateur de Tâches de Windows, sélectionnez "créer une tâche de base" (qui invoque un assistant). Définir le programme, le nom de votre fichier batch DOS. Il y a une case à cocher quelque chose comme "Ouvrez les propriétés de la fenêtre quand je suis fini." Vérifiez que donc vous qui allez à la fenêtre des propriétés.
6) Définir la tâche à exécuter, indépendamment de savoir si l'utilisateur est connecté ou non. De vérifier la "Exécuter avec les autorisations maximales", qui un ami sur ici proposé.
Vous pouvez maintenant tester le tout en cliquant-droit sur la tâche planifiée et en sélectionnant la commande Exécuter.
J'ai aimé Albert Kallal du script et il a essayé. Tout fonctionnait très bien jusqu'à ce que j'ai essayé de le programmer. Ensuite, pour quelque mystérieuse raison, le planificateur ne serait pas le déclencher.
OriginalL'auteur Karl Hoaglund