【问题标题】:Opening Access from Excel VBA从 Excel VBA 打开访问
【发布时间】:2013-05-01 03:37:26
【问题描述】:

编辑:这个问题的答案可以在已接受答案的 cmets 中找到。

我正在尝试通过单击我的 Excel 文件中的按钮来打开 Access 数据库。我目前有这个代码:

Private Sub bttnToAccess_Click()

Dim db As Access.Application

Set db = New Access.Application
db.Application.Visible = True
db.OpenCurrentDatabase "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb"

End Sub

这似乎短暂工作,然后 Access 几乎立即关闭。如果重要的话,Access 文件有一个 AutoExec 宏,它会在打开时运行一些测试。

【问题讨论】:

  • 您是尝试在 Excel 中运行 Access GUI,还是只是尝试连接到数据库并查询其中的数据?
  • 我只是为用户提供对数据库的轻松访问。我是 VBA 的新手,甚至不确定 Acess GUI 是什么。数据库基本上是一个用于策划婚礼的单独工具。 excel 和 access 文件最终将通过导入链接。

标签: ms-access excel vba


【解决方案1】:

此时不要尝试打开 Access 应用程序;只需使用其中一种数据访问技术创建连接对象: - OLE-DB 或 - ODBC。

Google“ODBC 连接字符串”或“OLE-DB 连接字符串”可根据您的特定配置(和 Access 文件类型)获取详细信息。

ADODB 可能是当前最容易用于数据访问的库。

更新: 尝试从 Access 导入数据,然后使用 Data -> From Access 向导。 Yu 可以随时使用宏重新编码工具为您自动生成一些 VBA 代码,这将为您创建一些基础设施;在探索 VBA 对象模型的新部分时,我经常使用它。

更新 - 问题的最终解决方案,来自下面的 cmets
那可能是因为变量超出了范围;将 db 的声明移到函数外,到模块级别

【讨论】:

  • 我很快浏览了谷歌上的一些结果,不知道他们在谈论什么或从那里去哪里。这个项目是为了介绍学校的 VBA 课程,所以我才刚刚开始学习。另外,我认为我上面关于导入的评论可能会混淆我的意图。我设计了一个用于管理宾客名单、供应商和其他一些东西的婚礼策划数据库。我现在正在处理的 excel 文件更多地处理婚礼的财务方面(建模、最小最大主要是计算等)。我真的只想能够打开访问文件而不是别的。
  • 如果 OP 像他所说的那样在 VBA 方面非常新手,那么一开始导航记录集可能有点难以咀嚼。
  • 是的,录制宏是一种很好的学习方式。但是,我目前没有尝试导入任何内容。我希望完成的只是提供一个替代方法,而不是去桌面并从那里打开文件。我想打开文件,然后什么都没有。就像我在问题中所说的那样,似乎代码提供了开放访问,但随后也立即关闭了它。
  • 那可能是因为变量超出了范围;将db 的声明移到函数外,到模块级别。
  • 这似乎奏效了!非常感谢,对所有的混乱感到抱歉。
【解决方案2】:

代码通过创建分配给对象变量的应用程序实例来启动 Access。在过程结束时,变量超出范围,因此 Access 关闭。

您接受了将模块级变量用于 Access 应用程序实例的答案。在这种情况下,Access 会在过程结束后继续运行。但是,如果用户退出 Excel,Access 也会关闭。

如果目标是启动 Access 并让它一直运行直到用户决定关闭它,只需直接启动 Access,而不将应用程序实例分配给对象变量 (Set db = New Access.Application)。如果您的 Excel 代码需要它用于其他目的,那么 db 变量会很有用。但是,它实际上只用于打开 db 文件。

您可以使用WScript.ShellRun 方法在Access 会话中打开您的db 文件。

Private Sub bttnToAccess_Click()
    Const cstrDbFile As String = "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb"
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run cstrDbFile
    Set objShell = Nothing
End Sub

【讨论】:

  • 我试过这个方法,它给出了一个运行时错误“对象'IWshShell3'的方法'运行'失败......
【解决方案3】:

我知道这是一个旧线程,但是如果您尝试打开 Access 数据库,但您没有单击两个特定的参考,您将在 Excel VBA 中收到此错误。 (工具,VBA 编辑器屏幕上的参考)。您需要点击“Microsoft Access 15.0 Object Library”和“Microsoft ActiveX Data Objects 6.1 Library”。

【讨论】:

    【解决方案4】:

    删除New 声明然后它就可以工作了

    【讨论】:

      【解决方案5】:

      其实很简单:

      Private Sub bttnToAccess_Click()
       db = DBEngine.OpenDatabase("C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb") 
      End Sub
      

      为此,您需要在模块级别将 db 声明为数据库。

       Dim db As Database  'Requires reference to the Microsoft
                           'Access Database Engine Object Library
      

      【讨论】:

      • db需要是 DAO(数据访问对象)而不是 ADO(Active X 数据对象)!
      • @ComputerVersteher 不错!
      • 常见缺陷。始终在 DAO/ADODB-Objects 上使用库声明
      猜你喜欢
      • 2015-08-02
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多