从外部VBScript在Access 2010中运行VBA宏

时间:2013-07-14 08:11:18

标签: ms-access vbscript access-vba scheduler

不确定这是否可行,但它似乎应该是可行的....毕竟它是2013年!我找到的一些论坛帖子表明它是,但我没有成功地让它发挥作用......

我有一个带有宏的Access 2010数据库,可以从3个不同的网站下载文件,然后继续导入数据并对其进行处理。它运行1小时17分钟。

我想安排这个宏在凌晨4点运行,所以它完成了所有的咖啡时间,并且工作时间从早上8点开始......所以我创建了一个VBScript来运行它,然后将其放入任务调度程序中期望的时间。

这是一个用户数据库,我只在我的电脑上使用。

我做了一些研究,但似乎无法让这个工作。这是我到目前为止所做的:

“Pricing Model.accdb”中的Access 2010中的“Main”模块内的宏:

Public Sub Download_And_Import()
    ProcStep = ""
    ExecStep = 1
    DoCmd.SetWarnings False
    'Empty the Execution Progress table
    DoCmd.RunSQL "DELETE * FROM EXECUTION_PROGRESS"
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Starting Download_Files Main Procedure...")
    Call Download_Files.Download_Files
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Finished Download_Files Main Procedure...")
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Starting Import_Files Main Procedure...")
    Call Import_Files.Import_Files
    Call Update_EXECUTION_PROGRESS(Format(Now(), "YYYY/MM/DD HH:MM:SS"), ExecStep, "Finished Import_Files Main Procedure, closing application now...")
    DoCmd.SetWarnings True
End Sub

然后我创建了以下VBScript以在外部运行Access VBA Macro:

dim accessApp
set accessApp = createObject("Access.Application")
accessApp.OpenCurrentDataBase("G:\Pricing DB\Pricing Model.accdb")
accessApp.Run "Download_And_Import"
accessApp.Quit
set accessApp = nothing

我收到消息“非法函数调用,第4行”,这是步骤:

accessApp.Run "Download_And_Import"

非常感谢任何想法/帮助!提前谢谢!

中号

3 个答案:

答案 0 :(得分:3)

我认为VBScript本身没有任何问题。我复制了您的代码,更改了db文件名和过程名称,并且运行时没有错误。所以我的猜测是,当尝试运行该过程时,Access的VBScript错误会“冒泡”。

在Access中打开Pricing Model.accdb,转到立即窗口( Ctrl + g ),输入以下行并按 Enter

Application.Run "Download_And_Import"

如果出现错误,您肯定在该过程中出现问题。如果它没有抛出错误,如果该过程需要Windows权限并且您没有将任务设置为在您的用户帐户下运行,则仍可能无法从计划任务运行它。

如果您需要对该过程进行故障排除,请先将Option Explicit添加到模块的声明部分。然后从VB Editor的主菜单中运行Debug-> Compile。修复编译器抱怨的任何内容。重复直到代码编译没有错误。

在故障排除期间禁用DoCmd.SetWarnings False,因为它会抑制信息。考虑用Database.Execute方法替换DAO DoCmd.RunSQL方法是否可以避免让SetWarnings完全关闭。

答案 1 :(得分:0)

您可以尝试包含ProjectName:

accessApp.Run "[Pricing Model].Download_And_Import"

项目名称默认为数据库名称,因为空格而需要方括号。

这不应该是必要的,因为您的Sub是公开的,但值得一试。

答案 2 :(得分:0)

我遇到了相同的(msg)问题,脚本没问题!问题是我在开发模式下打开数据库测试脚本,一旦我关闭数据库,脚本运行良好。在测试脚本之前关闭数据库。