从C#Winform调用Access 2013模块

问题描述:

我已经开始涉足MS Office产品自动获胜形式,并且遇到了困难。正如标题所示,我在VS2010(.NET 4.0)中使用C#,连接到Access 2013后端。从C#Winform调用Access 2013模块

这是我的问题,我试图在我的程序的后端数据库中运行一个模块。我见过一些职位在这里堆栈和阅读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.'。任何人都可以看到我到目前为止,并/或建议一个问题?

+0

作为记录中, Run()方法只能调用VBA代码。改用DoCmd。 –

+1

在'UtilityBackEnd.accdb'数据库的标准模块中'MakeProjectTable'是一个'Public'过程吗? – HansUp

+0

不,我现在要改变它 – alwaysthestudent

您的C#代码将工作if您已将您的VBA(访问)代码声明为

Public Sub MakeProjectTable() 

在“常规”Module中,而不是Class ModuleMicrosoft Access Class Object。换句话说,如果你在Access中打开数据库,并期待在VBA编辑器中Sub它必须位于一个模块中的工程资源管理器的“模块”文件夹下:

Module.png

+1

这似乎是正确的;这是我2天前试图告诉他们的。 :-)如果他们仍然有问题,在独立的Access会话中打开'H:\ MyConnection \ UtilityBackEnd.accdb',并确保它实际工作:'Application.Run“MakeProjectTable”' – HansUp

+1

是的,我看到了。我想也许一张漂亮的照片可能会有帮助。 :) –

+0

我认为它应该!它发生在我只说*标准*模块是不够的。 :-( – HansUp