从 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 Module
或 Microsoft Access Class Object
。换句话说,如果您在 Access 中打开数据库并在 VBA 编辑器中查看 Sub
,它必须位于 Project Explorer 的 "Modules" 文件夹下的模块中:
我已经开始涉足 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 Module
或 Microsoft Access Class Object
。换句话说,如果您在 Access 中打开数据库并在 VBA 编辑器中查看 Sub
,它必须位于 Project Explorer 的 "Modules" 文件夹下的模块中: