Pro*_*oVB 16 vbscript ms-access batch-file auto-update
我正在寻求关于如何安排数据库(.accdb)的自动更新的意见,因为我对我设置的过程不太满意.
目前,它的工作原理如下:
我认为有太多的步骤,并且它需要2个与数据库相关并存储在系统上的外部文件(.Bat和.vbs),这增加了程序中断的风险.
显然(但请告诉我,我错了,我怎么能改变它).vbs不能调用子程序而只能调用宏.同样,如果用户期望进入数据库的VB环境,则访问宏不能调用子例程,而只能调用函数.这就是我调用函数(VBA Level)然后调用子例程的原因.
希望你们中的一些人知道如何缩短步骤并最终获得.bat和.vbs
Gor*_*son 23
据我所知,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
Run Code Online (Sandbox Code Playgroud)
在数据库中创建一个宏来调用该函数:

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

在上面的对话框中,值为:
程序/脚本:
"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE"
Run Code Online (Sandbox Code Playgroud)
添加参数(可选):
C:\Users\Public\schedTest.accdb /x DoSomething
Run Code Online (Sandbox Code Playgroud)
vbs脚本可以使用以下命令调用任何标准的vba SUBROUTINE:
dim accessApp
set accessApp = createObject("Access.Application")
accessApp.OpenCurrentDataBase("C:\MyApp\MultiSelect.mdb")
accessApp.Run "TimeUpDate"
accessApp.Quit
set accessApp = nothing
Run Code Online (Sandbox Code Playgroud)
请注意,子TimeUpDate是标准VBA子例程.这意味着没有autoexec marocrs,也没有宏 - 只有纯VBA子调用+这个vbs脚本.
小智 6
有一个鲜为人知的技巧可追溯到最早的访问年限,允许它作为一个仍然有效的过程运行.访问将始终在启动时查找名为"Autoexec"的宏.如果找到它,它将立即开始执行此宏.我发现如果我需要在打开表单之前初始化程序,或者在原始提问者的情况下,将访问作为没有用户I/O的计划进程运行,我发现这非常有用.