从Excel VBA打开访问

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

我试图打开Access数据库从我的Excel文件中的button单击。 我目前有这样的代码:

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 

这似乎短暂工作,然后访问几乎立即closures。 如果重要的话,Access文件有一个AutoExecmacros,它可以在打开的时候自行运行一些testing。

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

谷歌“ODBC连接string”或“OLE-DB连接string”以获取详细信息取决于您的特定configuration(和Access文件types)。

可能ADODB是最容易使用的数据访问库。

更新:尝试从Access导入数据,然后使用数据 – >从访问向导。 Yu总是可以使用macroslogging工具为您自动生成一些VBA代码,这将为您创build一些基础设施; 在探索VBA对象模型的新部分时,我经常使用它。

更新 – 最终解决问题,从下面的评论
这可能是因为variables超出了范围; 将函数外部的db的声明移到模块级别

代码通过创build分配给对象variables的应用程序实例来启动Access。 在过程结束时,variables超出了范围,因此Accessclosures。

您接受了对Access应用程序实例使用模块级variables的答案。 在这种情况下,Access在程序结束后仍然保持运行。 但是,如果用户退出Excel,Access也将closures。

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

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

 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 

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

删除New声明,然后它的工作