8

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

我正在尝试通过单击我的 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 宏,它在打开时会运行一些测试。

4

5 回答 5

7

然后不要尝试打开 Access 应用程序;只需使用以下数据访问技术之一创建连接对象: - OLE-DB 或 - ODBC。

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

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

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

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

于 2013-05-01T03:54:43.963 回答
3

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

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

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

您可以使用 的Run方法WScript.Shell在 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
于 2013-05-02T01:52:30.737 回答
1

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

于 2017-10-04T13:31:22.963 回答
1

其实很简单:

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
于 2019-01-19T17:01:27.520 回答
1

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

于 2017-09-13T02:59:36.660 回答