从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.'
。任何人都可以看到我到目前为止,并/或建议一个问题?
答
您的C#代码将工作if您已将您的VBA(访问)代码声明为
Public Sub MakeProjectTable()
在“常规”Module
中,而不是Class Module
或Microsoft Access Class Object
。换句话说,如果你在Access中打开数据库,并期待在VBA编辑器中Sub
它必须位于一个模块中的工程资源管理器的“模块”文件夹下:
作为记录中, Run()方法只能调用VBA代码。改用DoCmd。 –
在'UtilityBackEnd.accdb'数据库的标准模块中'MakeProjectTable'是一个'Public'过程吗? – HansUp
不,我现在要改变它 – alwaysthestudent