Искали ли сте някога да стартирате код за достъп по автоматичен график?
Ще ви покажа как да използвате съществуващо приложение на Access, за да стартирате и излизате грациозно, когато бъде стартирано чрез Task Scheduler, като същевременно представяте удобен потребителски интерфейс, когато се стартира от краен потребител.
Ключът към това да работи е /cmd
флаг.
Подаване на аргументи от командния ред за достъп
За да предадете аргумент от командния ред за достъп, използвате /cmd
Аргумент на командния ред при стартиране на вашето приложение:
Указва, че това, което следва в командния ред, е стойността, която ще бъде върната от Командата функция. Тази опция трябва да е последният превключвател в командния ред. Можете да използвате точка и запетая (;) като алтернатива на /cmd .
Използвайте този превключвател, за да посочите аргумент от командния ред, който може да се използва в кода на Visual Basic за приложения (VBA)
За да извлечете текста, предавате на командния ред след /cmd
аргумент, използвате VBA.Command
функция.
Можете да използвате тази функция при стартиране, за да пренасочите кода си за изпълнение на всяка повтаряща се задача.
Практически пример
- Създайте нова база данни
- Добавете следния код към нов стандартен модул:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Създайте нов макрос
- Изберете „RunCode “ от падащото меню „Добавяне на ново действие“
- Задайте „Име на функцията“ на
Startup()
- Затворете и запазете макроса като „AutoExec "
Изпълнявайте като нормален потребител
За да тествате приложението като обикновен потребител, просто компактирайте и поправете базата данни.
Ще видите поле за съобщение, което казва „Стартиране.“
Изпълнение като планирана задача
За да имитирате изпълнение като планирана задача, затворете вашата база данни и я стартирайте със следната команда:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
Access ще мига за кратко на екрана, след което ще видите диалоговия прозорец „За Windows“ и Access ще се затвори сам.
Някои бележки
AutoExec
е специален макрос, който се изпълнява автоматично при стартиране- Въпреки че
Startup()
рутина не връща стойност, ние я декларираме катоFunction
защото не можем директно да извикамеSub
от макрос в Access - При нормална употреба кодът на cmd прозореца се пропуска
- Изрично извиквам
Application.Quit
вътре в моя блок „Nightly“, за да избегна блокирането на достъпа върху код, който изисква взаимодействие с потребителя (като кода MsgBox в моя пример) - Винаги извиквам
Trim()
околоVBA.Command
функция за избягване на грешки, въведени от водещи или крайни бели интервали в командния ред - Като алтернатива на
/cmd
, можете също да използвате/x
превключете и му предайте името на персонализиран макрос (Не го правя, защото мразя макроси със страстта на хиляди бели горещи слънца; единствените два макроса, които използвам саAutoexec
иAutokeys
защото предоставят специална функционалност )
Последна бележка за планировчика на задачи и автоматизирането на други офис приложения
Ако изглежда, че задачата ви не работи, когато я настроите да се изпълнява през нощта, опитайте да превключите опцията за планирана задача на „Изпълнение само когато потребителят е влязъл в системата.
Office приложенията не са предназначени да работят в това, което Windows нарича "неинтерактивен" режим. Ако зададете насрочена задача на „Изпълнение, независимо дали потребителят е влязъл или не“, тази задача ще се изпълнява в неинтерактивен режим. Това може да причини различни проблеми, особено ако автоматизирате Excel като част от повтарящия се процес.
Най-простото решение е да заключите работната станция, вместо да излизате, и да оставите опцията, зададена на „Изпълни само когато потребителят е влязъл“.
Това може да не е практично във вашата ситуация, но е важно съображение, което трябва да знаете. Считайте, че сте предупредени:
Понастоящем Microsoft не препоръчва и не поддържа автоматизиране на приложения на Microsoft Office от ненадзорено, неинтерактивно клиентско приложение или компонент