作为计划任务运行Microsoft Access

我正在寻求关于如何安排自动更新数据库(.accdb)的意见,因为我对自己设置的过程不太了解。

目前,它的工作原理如下:

  1. 任务计划程序调用.bat
  2. .bat调用.vbs
  3. .vbs打开数据库并调用一个macros
  4. macros调用一个函数(VBA级别)
  5. 该函数调用更新子程序

我认为有太多的步骤,而且它需要与数据库相关的两个外部文件(.Bat和.vbs),并且存储在系统中会增加程序中断的风险。

显然(但请告诉我,我错了,我怎么可以改变它).vbs不能调用一个子程序,但只有一个macros。 同样,如果用户希望进入数据库的VB环境,则访问macros不能调用子例程,而只能调用函数。 这就是为什么我调用函数(VBA Level)然后调用子程序的原因。

希望你们中的一些人知道如何缩短步骤,最终得到.bat和.vbs的搭档

就我所知,Windows预定任务“在Access VBA中执行一些有用的事情”的最短path是:

在数据库中创build一个公用函数(不是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 

在数据库中创build一个macros来调用该函数:

Macro.png

创build一个Windows计划任务以使用适当的参数调用MSACCESS.EXE

SchedTask.png

在上面的对话框中的值是:

程序/脚本:

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

添加参数(可选)

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

有一个可以追溯到最早几年的技巧,可以让它作为一个仍然有效的过程来运行。 访问将始终在启动寻找一个名为“Autoexec”的macros。 如果发现它会立即开始执行这个macros。 我发现这是非常有用的,如果我需要在打开表单之前初始化程序,或者像原始提问者的情况那样,将访问作为没有用户I / O的计划进程来运行。

一个vbs脚本可以调用任何标准的vba子程序,如下所示:

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

请注意,子TimeUpDate是一个标准的VBA子例程。 这意味着没有autoexec marocrs,根本没有macros – 只有纯粹的VBA子调用+这个VBS脚本。

在我的头靠在墙上打了四个小时之后,我终于得到了这个工作:

1)用一行创build一个DOSbatch file。 该行由三部分组成:a)Microsoft Access的完整path(msaccess.exe); b)Microsoft Access数据库的完整path及其中的代码; c)Access命令行参数“/ x MacroName” 。 前两项应该用引号括起来。 我看起来像这样:

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

2)使用您在batch file中使用的名称在Access中创build一个macros。 它有一个命令RunCode ,它带有一个你想调用的VBA函数的名字的参数。 这应该跟着打开/closures括号“()”。 我没有尝试将任何parameter passing给函数; 我认为这会有问题。

4)确保你调用的VBA函数最后有一个Docmd.Quit命令,或者你把它作为第二行添加到你的macros。 这些将确保Access在您的stream程运行后不​​会保持打开状态。

5)在Windows任务计划程序中,select“创build基本任务”(调用向导)。 将程序名称设置为您的DOSbatch file的名称。 有一个有用的checkbox标记为“当我完成时打开属性窗口”。 检查一下你的属性窗口。

6)无论用户是否login,设置任务运行。 同时检查“运行最高权限”框,哪一个朋友在这里build议。

现在可以通过右键单击计划任务并select“运行”命令来testing所有内容。

我喜欢Albert Kallal的剧本并尝试过。 一切工作很好,直到我试图安排它。 然后,出于某种神秘的原因,调度程序不会启动它。