打我的头撞在墙上约四小时后,我终于得到这个工作:
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)设置任务运行,无论用户是否登录。同时检查“运行最高权限”框,哪一位朋友在这里建议。
您现在可以通过右键单击计划任务并选择运行命令来测试所有内容。
我喜欢Albert Kallal的剧本并尝试过。一切工作很好,直到我试图安排它。然后,出于某种神秘的原因,调度程序不会启动它。
**(1)**无论是'.bat'还是'.vbs'脚本都不只是一行代码?如果没有,那么你可能只是更新你的预定任务来运行具有所需参数的'MSACCESS.EXE'。 **(2)**是的,Access中的宏只能调用一个函数,但是你可以将你的Sub转换成一个不返回任何东西的函数(或者返回一些像'True'这样的任意值)。 –
我尝试从任务计划程序调用MSACCESS.EXE,但我没有成功,这就是为什么我使用.bat .vbs方法的原因。将再试一次。我supopose我需要在Access中有一个计时器,然后触发更新... – ProtoVB
不,您使用'-x'命令行开关调用MSACCESS.EXE并且要运行宏的名称。详细信息[这里](http://support.microsoft.com/kb/209207)。 –