将Microsoft Access作为计划任务运行

时间:2013-11-27 14:27:57

标签: ms-access batch-file vbscript auto-update

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

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

  1. 任务计划程序调用.bat
  2. .bat调用.vbs
  3. .vbs打开数据库并调用宏
  4. 宏调用函数(VBA级别)
  5. 该函数调用update subroutine
  6. 我认为有太多步骤,而且它需要2个与数据库相关并存储在系统中的外部文件(.Bat和.vbs)会增加程序中断的风险。

    显然(但请告诉我我错了以及如何更改它).vbs不能调用子程序而只能调用宏。同样,如果用户期望进入数据库的VB环境,则访问宏不能调用子例程,而只能调用函数。这就是我调用函数(VBA Level)然后调用子例程的原因。

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

4 个答案:

答案 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

在数据库中创建一个宏来调用该函数:

Macro.png

创建Windows计划任务以使用适当的参数

调用MSACCESS.EXE

SchedTask.png

在上面的对话框中,值为:

程序/脚本:

"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的剧本并尝试过。一切顺利,直到我试图安排它。然后,由于一些神秘的原因,调度程序不会启动它。