我正在寻求关于如何安排数据库(.accdb)自动更新的评论,因为我对我设置的过程不太满意。
目前,它的工作原理如下:
我认为有太多步骤,而且它需要2个与数据库相关并存储在系统中的外部文件(.Bat和.vbs)会增加程序中断的风险。
显然(但请告诉我我错了以及如何更改它).vbs不能调用子程序而只能调用宏。同样,如果用户期望进入数据库的VB环境,则访问宏不能调用子例程,而只能调用函数。这就是我调用函数(VBA Level)然后调用子例程的原因。
希望你们中的一些人知道如何缩短步骤并最终获得.bat和.vbs
答案 0 :(得分:22)
据我所知,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
在数据库中创建一个宏来调用该函数:
创建Windows计划任务以使用适当的参数
调用MSACCESS.EXE
在上面的对话框中,值为:
程序/脚本:
"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE"
添加参数(可选):
C:\Users\Public\schedTest.accdb /x DoSomething
答案 1 :(得分:7)
vbs脚本可以使用以下命令调用任何标准的vba SUBROUTINE:
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,也没有宏 - 只有纯VBA子调用+这个vbs脚本。
答案 2 :(得分:6)
有一个鲜为人知的技巧可以追溯到最早的访问年份,允许它作为一个仍然有效的过程运行。访问将始终在启动时查找名为" Autoexec"的宏。如果找到它,它将立即开始执行此宏。我发现如果我需要在打开表单之前初始化程序,或者在原始提问者的情况下,将访问作为没有用户I / O的计划进程运行,我发现这非常有用。
答案 3 :(得分:3)
将头撞到墙上大约四个小时后,我终于开始工作了:
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批处理文件的名称。这是一个标有类似&#34的有用复选框;当我完成时打开属性窗口。"检查一下,然后转到属性窗口。
6)无论用户是否登录,都将任务设置为运行。同时检查"以最高权限运行"盒子,这位朋友在这里建议。
现在,您可以通过右键单击计划任务并选择“运行”命令来测试所有内容。
我喜欢Albert Kallal的剧本并尝试过。一切顺利,直到我试图安排它。然后,由于一些神秘的原因,调度程序不会启动它。