我想设置我的计算机,使其每天自动执行我在电子表格或访问数据库中编写的 VBA 宏。
那么有什么方法可以从批处理文件中调用 VBA 宏,或者类似的东西?
当然。使用命令行开关,提供的链接是关于命令行开关的页面。对于 Access ,对于 Excel
这是我在加载 msaccess 文件然后运行存储的宏的 .bat 文件中的示例。
start msaccess "%localFolder%%localFileName%" /x %macroName%
在这种情况下%localFolder%%localFileName%
,加起来就是包含 mdb/accdb 文件的完整路径,并且%macroName%
是宏的名称。
对于 Excel,只需将要运行的任何内容放入Workbook.Open
事件中。然后使用如下命令加载它:
start excel %workbookPath%
这将创建一个新的 Excel 实例,打开工作簿并触发Workbook.Open
事件。如果您认为您可能打开了工作簿,您可能还希望传递只读参数/r
,以便在无需用户输入的情况下重新打开工作簿。
设置好 .bat 文件后,只需使用 Windows 调度程序对其进行调度。
就个人而言,除非您的脚本是 Access 或 Excel 特定的,否则我建议您在 .VBS 中重写您的脚本,以便它可以在没有 Excel 或 Access 开销的情况下运行并安排它。:)
如果要更改电子表格或 Access 数据库中的数据,您可能希望使用 VBS 和 DAO 对象:
Set Dbe = CreateObject("DAO.DBEngine.36")
使用 DAO 更新数据的优点是它比 Excel 或 Access 应用程序更小、更快、更轻。更健壮,更稳定。崩溃时不会弹出消息框:不需要 GUI 登录用户。
只使用 DAO(或 ADO)的缺点是它是一个更小、更快、更轻的对象:它不能做任何事情,比如打印或 VBA(虽然你可以读取一个单元格,做一个 VBS 计算,然后插入数据)。
特别是,DAO/ADO 对象不能使 Excel 重新计算单元格值。为此,您需要 Excel。它不能在 Access 中使用 UDF。为此,您需要 Access。
(您可以使用 VBS 自动化 Access/Excel,但这只是在 Access/Excel 之上添加了另一层,因此这通常不是一个好主意。)