作为计划任务运行Microsoft Access
我正在寻求关于如何安排自动更新数据库(.accdb)的意见,因为我对自己设置的过程不太了解。
目前,它的工作原理如下:
- 任务计划程序调用.bat
- .bat调用.vbs
- .vbs打开数据库并调用一个macros
- macros调用一个函数(VBA级别)
- 该函数调用更新子程序
我认为有太多的步骤,而且它需要与数据库相关的两个外部文件(.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来调用该函数:
创build一个Windows计划任务以使用适当的参数调用MSACCESS.EXE
在上面的对话框中的值是:
程序/脚本:
"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的剧本并尝试过。 一切工作很好,直到我试图安排它。 然后,出于某种神秘的原因,调度程序不会启动它。