从 C# Winform 调用 Access 2013 模块

Calling Access 2013 Module from C# Winform

我已经开始涉足 Win Forms 的 MS Office 产品自动化,但遇到了瓶颈。正如标题所示,我在 VS2010 (.NET 4.0) 中使用 C#,连接到 Access 2013 后端。

这是我的问题,我正在尝试 运行 我程序后端数据库中的一个模块。我在 Stack 上看到了很多帖子,在 MSDN 上阅读了几篇文章,并得出了以下结论:

using Access = Microsoft.Office.Interop.Access;
void RunAccessModule() 
{
    try
    {
        Access.Application oAccess = new Access.Application();
        oAccess.OpenCurrentDatabase("H:\MyConnection\UtilityBackEnd.accdb", false);
        oAccess.Run("MakeProjectTable"); //Name of procedure in module
        oAccess.CloseCurrentDatabase();
    }
    catch (Exception ex) 
    {
        ex.Message;
    }
}

当我 运行 我的程序时,我收到一条错误消息: "Microsoft Access cannot find the procedure 'MakeProjectTable.'" 我尝试使用 运行 命令(即 oAccess.Run("Module1.MakeProjectTable"); )更加具体,但我收到了类似的错误消息(cannot find 'Module1.MakeProjectTable.'。任何人都可以看到我目前所拥有的问题吗,and/or 建议?

如果您已将 VBA(访问)代码声明为

,您的 C# 代码将正常工作
Public Sub MakeProjectTable()

在 "regular" Module 中,而不是 Class ModuleMicrosoft Access Class Object。换句话说,如果您在 Access 中打开数据库并在 VBA 编辑器中查看 Sub,它必须位于 Project Explorer 的 "Modules" 文件夹下的模块中: