2013-07-14 6 views
3

Не уверен, что это возможно, но похоже, что это должно быть выполнимо .... это в 2013 году! И некоторые сообщения на форуме, которые я нашел, предлагают, но я не добился успеха в том, чтобы заставить его работать ...Запуск макроса VBA в Access 2010 от внешнего VBScript

У меня есть Access 2010 db с макросом, который загружает файлы с трех разных веб-сайтов, а затем переходит к импорту данные и обрабатывать его. Он работает в течение 1 часа и 17 минут.

Я хочу запланировать выполнение этого макроса в 4 часа ночи, так что все это сделано и вычищено кофе временем и началом работы 8 утра ... Итак, я создал VBScript для его запуска, который затем будет помещен в Планировщик заданий для желаемое время.

Это единственная пользовательская БД, которую я использую только на своем ПК.

Я провел некоторое исследование, но я не могу заставить его работать. Вот то, что я до сих пор:

Macro внутри модуля "Main" в Access 2010 внутри "Ценообразование Model.accdb":

Public Sub Download_And_Import() 
    ProcStep = "" 
    ExecStep = 1 
    DoCmd.SetWarnings False 
    'Empty the Execution Progress table 
    DoCmd.RunSQL "DELETE * FROM EXECUTION_PROGRESS" 
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Starting Download_Files Main Procedure...") 
    Call Download_Files.Download_Files 
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Finished Download_Files Main Procedure...") 
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Starting Import_Files Main Procedure...") 
    Call Import_Files.Import_Files 
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Finished Import_Files Main Procedure, closing application now...") 
    DoCmd.SetWarnings True 
End Sub 

Затем я создал следующий VBScript для запуска Access VBA макросов внешне:

dim accessApp 
set accessApp = createObject("Access.Application") 
accessApp.OpenCurrentDataBase("G:\Pricing DB\Pricing Model.accdb") 
accessApp.Run "Download_And_Import" 
accessApp.Quit 
set accessApp = nothing 

Я получаю сообщение "вызов функции Нелегальная, строка 4", который является шагом:

accessApp.Run "Download_And_Import" 

Любые идеи/помощь приветствуются! Заранее спасибо!

M

+1

Код работал отлично для меня после определения переменных 'ProcStep' и' ProcExec'. Сделайте приложение видимым ('accessApp.Visible = True'), поэтому вы можете использовать редактор макросов для отладки. –

+0

Я не могу проверить это прямо сейчас, но попробуйте добавить круглые скобки: 'accessApp.Run (« Download_And_Import »)'. – UberNubIsTrue

+0

Hi Ansgar Wiechers, извините, но я новичок в VBS (хотя у меня немного опыта VBA). По вашему предложению, когда я добавляю строку (accessApp.Visible = True), Access открывается, когда я запускаю VBS, но я все равно получаю сообщение об ошибке Illegal Function Call. Я не уверен, что вы имеете в виду при определении ProcStep и ProcExec, можете ли вы разработать PLS. Спасибо за помощь. – TheRealPapa

ответ

3

Я не вижу ничего плохого в самом VBScript. Я скопировал ваш код, изменил имя файла db и имя процедуры, и он работал без ошибок. Поэтому я предполагаю, что ошибка VBScript «пузырится» от Access при попытке запустить процедуру.

Open Pricing Model.accdb в Access, перейдите в открывшееся окно (Ctrl + г), введите следующую строку и нажмите Enter

Application.Run "Download_And_Import" 

Если выдает ошибку, вы, несомненно, имеют проблема в этой процедуре. Если это не вызывает ошибку, вы все равно можете запустить ее из запланированной задачи, если для этой процедуры требуются разрешения Windows, и вы не задали задачу для запуска под учетной записью пользователя.

Если вам необходимо устранить эту проблему, сначала добавьте Option Explicit в раздел Декларации модуля. Затем запустите Debug-> Compile из главного меню VB Editor. Исправьте все, о чем компилятор жалуется. Повторяйте, пока код не будет компилироваться без ошибок.

Отключить DoCmd.SetWarnings False во время поиска и устранения неисправностей, поскольку он подавляет информацию. Посмотрите, заменит ли метод DAO Database.Execute на DoCmd.RunSQL, чтобы вы вообще не отключили SetWarnings.

+0

Привет, Ханс, спасибо за предложение. Я попробовал ваше предложение (Ctr + G) и работал отлично. В Access VBA ошибок нет, когда я запускаю их вручную (или с помощью Ctrl + G). Кстати, я пытаюсь запустить VBScript, дважды щелкнув по нему. Как только он будет работать вручную, я заплачу за него, поэтому я еще не прошел его. Таким образом, он работает с моими правами доступа (или пытается!). Еще раз спасибо. – TheRealPapa

+0

Попробуйте запустить скрипт из командной строки, используя 'cscript YourScriptName.vbs'. Я не уверен, что предоставит нам лучшую информацию, но мне больше нечего предлагать. – HansUp

0

Вы могли бы попробовать, включая Projectname:

accessApp.Run "[Pricing Model].Download_And_Import" 

имя-проекта по умолчанию имя базы данных, а также квадратные скобки необходимы из-пространств.

Это не обязательно, потому что ваш Sub является общедоступным, но стоит попробовать.

+0

Привет, Энди Г, спасибо за это предложение, но это не сработало , Он выкинул ошибку «MS Access не может найти процедуру [Модель ценообразования]». Кстати, я запускаю VBS, дважды щелкнув по нему. Как только он будет работать вручную, я планирую его. – TheRealPapa

+0

Что делает Update_EXECUTION_PROGRESS и где он хранится? –

+0

Hi Andy G, Update_EXECUTION_PROGRESS - это, по сути, процедура обновления таблицы в том же БД, где хранятся сообщения о ходе выполнения. Благодарю. – TheRealPapa

0

Я столкнулся с тем же (msg) выпуском сценария в порядке! Проблема заключалась в том, что я тестировал скрипт с открывшейся базой данных, поскольку я был в режиме разработки, так как вскоре я закрыл базу данных, сценарий работал хорошо. Закройте базу данных перед тестированием скрипта.