从C#Winform调用Access 2013模块

时间:2016-01-20 15:40:32

标签: c# .net winforms automation ms-access-2013

我已经从胜利形式开始涉足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.'"我尝试使用run命令更具体(即oAccess.Run("Module1.MakeProjectTable");),但是我收到了类似的错误消息({{ 1}}。任何人都可以看到我目前所拥有的问题,和/或建议吗?

1 个答案:

答案 0 :(得分:1)

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

,则您的C#代码将起作用
Public Sub MakeProjectTable()

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

Module.png