如何在Access 2007中安排宏自动运行?

5
我希望能有一个宏,称为Macro1,例如,每天上午9点运行。它在Access 2007的VB代码编辑器中可以很好地工作,但我希望它能够自动执行而无需打开Access。
请注意,我不想要任何人类干预,它需要能够自动运行,而不需要有人打开Access触发autoexec或onload或类似的操作。
这是否可能?

这个有点奇怪...你想在不运行Access的情况下运行一个Access宏!你不能用另一种语言来达到相同的效果吗? - Philippe Grondier
@Philippe:基本上,我需要按计划从另一个数据库中提取数据。数据是在另一个由某些烂软件管理的数据库中输入的,我不被允许触碰。我需要获取每天输入的一些信息,并且希望能够这样做,而无需每天让某人打开访问并单击某个内容。不一定要在没有运行访问的情况下运行它,而是打开访问并执行该宏,然后退出,如果更有意义的话。 - alexcoco
1
如果你只是运行查询,那么你可以通过vbScript使用DAO来完成。至于宏,请参见我的答案。 - David-W-Fenton
3个回答

6
您可以使用MS Access命令行开关来运行宏。如果您在Access帮助中搜索“commandline”,则主题“启动命令行选项”会提供所有命令行开关。运行宏的开关为x macro
因此,如果您编写宏以运行所需内容并在完成后退出Access,则可以创建一个命令行来完成操作,并将其放入Windows任务计划程序可以执行的批处理文件中。
但是,正如我在上面的评论中所说,如果您只是运行一些查询,我建议完全绕过Access并直接在计划的vbScript中使用DAO来执行查询,这样更有意义。

这听起来不错。它不仅仅是一些查询尽管这是其中的一部分。我需要从另一个数据库查询关联表并更新当前数据库中的内容。 - alexcoco
1
我不确定运行某些查询和“查询链接表并更新当前数据库中的内容”的区别在哪里——这不是通过运行查询完成的吗?如果不是,也许应该是这样吗? - David-W-Fenton
是的,这可以通过查询来完成。但是然后我需要使用结果来更新另一个本地表的部分内容。 - alexcoco
我仍然不明白为什么“使用结果来更新”其他东西会阻止我所建议的。 - David-W-Fenton
我有一行包含来自关联表中每行的三个字段的信息。这就是为什么我不能只运行一个更新查询,因为我的表中每行都必须更新三次,每个字段一次。除非我运行三个更新查询。我想这似乎过于复杂了,但关联表由另一款软件管理,它似乎喜欢把事情搞得复杂化。 - alexcoco
显示剩余5条评论

5
你需要创建VBScript来运行你的宏,并创建一个批处理文件来安排你的VBScript。
  • VBScript 代码,将其保存为 schedule.vbs 文件

    Dim accessApp
    set accessApp = createObject("Access.Application") accessApp.OpenCurrentDataBase("fullpath\msaccessdb")

    accessApp.Run "Macroname",param1, param2,param3
    accessApp.Quit
    set accessApp = nothing

  • 然后创建 file.bat 文件

    @echo off
    cscript schedule.vbs

然后您可以使用 Windows 任务计划程序进行调度, http://www.thewindowsclub.com/how-to-schedule-batch-file-run-automatically-windows-7

希望这能帮到您 :D


你已经晚了将近3年,这个项目对我来说已经不再相关。已经有一个被接受的答案了。也许你的答案仍然可以帮助其他人。感谢您的发帖。 - alexcoco
2
@noodle,vbscript文件有什么意义呢?为什么不直接运行宏呢? - PowerUser

4
您可以使用Windows任务计划程序和VBScript运行代码或启动Access。

那么我基本上会安排一个脚本在每天的特定时间运行,然后让该脚本打开访问并执行宏?这可行吗? - alexcoco
当然,前提是宏最终执行的操作可以通过DAO或通过Access自动化完成。 - David-W-Fenton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接