Подтвердить что ты не робот

Запуск Microsoft Access как запланированной задачи

Я ищу комментарии о том, как планировать автоматические обновления базы данных (.accdb), так как мне не очень нравится процесс, который я создал.

В настоящее время он работает следующим образом:

  • Планировщик заданий вызывает .bat
  • .bat вызывает .vbs
  • .vbs открывает базу данных и вызывает макрос
  • Макрос вызывает функцию (уровень VBA)
  • Функция вызывает подпрограмму обновления

Я считаю, что слишком много шагов, и тот факт, что он требует 2 внешних файла (.Bat и .vbs), связанных с базой данных и хранящихся в системе, увеличивает риск того, что процедура сломается.

Видимо (но, пожалуйста, скажите мне, что я ошибаюсь и как я могу его изменить).vbs не могут вызвать подпрограмму, а только макрос. Точно так же макрос доступа не может вызывать подпрограмму, а только функцию, если пользователь ожидает входа в среду VB базы данных. Именно по этой причине я вызвал функцию (VBA Level), которая затем вызывает подпрограмму.

Надеюсь, что некоторые из вас знают, как укоротить шаги и, в конечном итоге, получить пропуск .bat и .vbs

4b9b3361

Ответ 1

Насколько мне известно, кратчайший путь для запланированной задачи Windows "сделать что-то полезное в Access VBA":

Создать публичную функцию (не Sub) в базе данных. Например:

Option Compare Database
Option Explicit

Public Function WriteToTable1()
    Dim cdb As DAO.Database
    Set cdb = CurrentDb
    cdb.Execute "INSERT INTO Table1 (textCol) VALUES ('sched test')", dbFailOnError
    Set cdb = Nothing
    Application.Quit
End Function

Создайте макрос в базе данных для вызова функции:

Macro.png

Создайте запланированную задачу Windows для вызова MSACCESS.EXE с соответствующими параметрами

SchedTask.png

В приведенном выше диалоговом окне значения:

Программа/script:

"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE"

Добавить аргументы (необязательно):

C:\Users\Public\schedTest.accdb /x DoSomething

Ответ 2

Существует малоизвестный трюк, относящийся к самым ранним годам доступа, чтобы позволить ему работать как процесс, который все еще работает. Доступ всегда при запуске ищет макрос, называемый "Autoexec". Если он найдет это, он сразу начнет выполнение этого макроса. Я считаю, что это очень полезно, если мне нужно инициализировать программу перед открытием форм или, как в случае с исходным опросом, запустить доступ в виде запланированного процесса без ввода/вывода пользователя.

Ответ 3

A vbs script может вызывать любой стандартный vba SUBROUTINE со следующим:

dim accessApp
set accessApp = createObject("Access.Application")
accessApp.OpenCurrentDataBase("C:\MyApp\MultiSelect.mdb")

accessApp.Run "TimeUpDate"

accessApp.Quit
set accessApp = nothing

Обратите внимание, что sub TimeUpDate является стандартной подпрограммой VBA. Это означает, что нет autoexec-макросов, а макросов вообще нет - только чистые подзаголовки VBA + это vbs script.

Ответ 4

После того, как я ударил головой о стену около четырех часов, я наконец получил это, чтобы работать:

1) Создайте пакетный файл DOS с одной строкой. Линия состоит из трех частей: a) полного пути к Microsoft Access (msaccess.exe), b) полного пути к базе данных Microsoft Access с кодом в ней и c) аргумента командной строки Access "/x MacroName", Первые два элемента должны быть окружены кавычками. Мой выглядит так:

"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "C:\MyPrograms\ProdDB Reports\ProdDB Reports.accdb" /X DailyTestReportsRun

2) Создайте макрос внутри Access с именем, которое вы использовали в вашем пакетном файле. Он имеет одну команду RunCode с аргументом имени функции VBA, которую вы хотите вызвать. За этим должна следовать открытая/закрывающая скобка "()". Я не пробовал передавать какие-либо параметры функции; Я думаю, что это будет проблематично.

4) Убедитесь, что функция VBA, которую вы вызываете, имеет команду Docmd.Quit в конце или добавляет ее как вторую строку к вашему макросу. Это гарантирует, что Access не останется открытым после запуска вашего процесса.

5) В Планировщике задач Windows выберите "создать базовую задачу" (которая вызывает мастер). Задайте имя программы для имени вашего командного файла DOS. Там полезный флажок с надписью "Открыть окно свойств, когда я закончу". Убедитесь, что вы перейдете в окно свойств.

6) Задайте задачу для запуска независимо от того, вошел ли пользователь в систему или нет. Также установите флажок "Выполнить с наивысшими привилегиями", который предложил один из друзей.

Теперь вы можете протестировать все, щелкнув правой кнопкой мыши запланированную задачу и выбрав команду "Выполнить".

Мне понравился Альберт Каллал script и попробовал. Все отлично работало, пока я не попытался запланировать его. Затем, по какой-то загадочной причине, планировщик не выкинул бы его.