【问题标题】:Calling Access 2013 Module from C# Winform从 C# Winform 调用 Access 2013 模块
【发布时间】:2016-04-26 13:13:09
【问题描述】:

我已经从 win 表单开始涉足 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.'。任何人都可以看到我目前的问题,和/或建议一个?

【问题讨论】:

  • 如文档所述,Run() 方法只能调用 VBA 代码。请改用 DoCmd。
  • MakeProjectTable 是您的UtilityBackEnd.accdb 数据库中标准模块中的Public 过程吗?
  • 不,我现在就改
  • 更改后出现错误。
  • 为澄清起见,声明行现在为:Public Sub MakeProjectTable()

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


【解决方案1】:

如果您已将 VBA(访问)代码声明为,您的 C# 代码将可以工作

Public Sub MakeProjectTable()

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

【讨论】:

  • 这似乎是正确的;这是我两天前试图告诉他们的。 :-) 如果他们仍然有问题,请在独立的 Access 会话中打开 H:\MyConnection\UtilityBackEnd.accdb 并确保它确实有效:Application.Run "MakeProjectTable"
  • 是的,我看到了。我想也许一张漂亮的照片可能会有所帮助。 :)
  • 我认为应该!我只是说 standard 模块是不够的。 :-(
  • @HansUp 很抱歉之前没能理解你,我刚试过,第一次就成功了,谢谢你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
相关资源
最近更新 更多