从C#Winform调用Access 2013模块

从C#Winform调用Access 2013模块,c#,.net,winforms,automation,ms-access-2013,C#,.net,Winforms,Automation,Ms Access 2013,我已经开始涉足win forms中MS Office产品的自动化,并且遇到了麻烦。正如标题所示,我正在VS2010(.NET 4.0)中使用C#,连接到Access 2013后端 这是我的问题,我试图在我的程序的后端数据库中运行一个模块。我在Stack上看到了许多帖子,读了一些关于MSDN的文章,并得出以下结论: using Access = Microsoft.Office.Interop.Access; void RunAccessModule() { try {

我已经开始涉足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找不到过程“MakeProjectTable”。我尝试使用run命令更具体一些(即,
oAccess.run(“Module1.MakeProjectTable”);
),但我收到了类似的错误消息(
找不到'Module1.MakeProjectTable.
。有人能看到我到目前为止的问题吗,和/或提出建议吗?

如果您将VBA(Access)代码声明为

公共子MakeProjectTable()
在“常规”
模块
,而不是
类模块
Microsoft Access类对象
。换句话说,如果在Access中打开数据库,并在VBA编辑器中查看子模块,它必须位于Project Explorer的“模块”文件夹下的模块中:


如文件所述,运行()方法只能调用VBA代码。请改用DoCmd。是否
MakeProjectTable
UtilityBackEnd.accdb
数据库中标准模块中的
Public
过程?否,我现在更改它更改后出现错误。为了澄清,声明行现在显示:
Public Sub MakeProjectTable()
这似乎是正确的;这是我两天前试图告诉他们的。:-)如果他们仍然有问题,请在独立访问会话中打开
H:\MyConnection\utilitybend.accdb
并确保它确实有效:
Application.Run“MakeProjectTable”
是的,我看到了。我想一幅漂亮的图片可能会有所帮助。:)我想应该是的!我突然想到,标准模块是不够的-(@HansUp我真的很抱歉之前没有理解你们,我刚试过这个,第一枪就成功了,谢谢你们两位。