编辑:这个问题的答案可以在已接受答案的评论中找到。
我正在尝试通过单击 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 宏,它在打开时会自行运行一些测试。
此时不要尝试打开 Access 应用程序;只需使用一种数据访问技术创建一个连接对象: - OLE-DB 或 - ODBC。
Google“ODBC 连接字符串”或“OLE-DB 连接字符串”以根据您的特定配置(和 Access 文件类型)获取详细信息。
ADODB 可能是当前最容易用于数据访问的库。
更新: 尝试从 Access 导入数据,然后使用数据 -> 来自 Access 向导。 Yu始终可以使用宏重新编码工具自动为您生成一些VBA代码,这将为您创建一些基础设施;在探索 VBA 对象模型的新部分时,我经常使用它。
更新 - 问题的最终解决方案,来自下面的评论
这可能是因为变量超出了范围;将
db
的声明移至函数外部,移至模块级别
代码通过创建分配给对象变量的应用程序实例来启动 Access。在该过程结束时,变量超出范围,因此 Access 关闭。
您接受了为 Access 应用程序实例使用模块级变量的答案。在这种情况下,Access 在过程结束后仍保持运行。但是,如果用户退出 Excel,Access 也会关闭。
如果目标是启动 Access 并保持其运行直到用户决定关闭它,则只需直接启动 Access,而不将应用程序实例分配给对象变量 (
Set db = New Access.Application
)。如果您的 Excel 代码需要它用于其他目的,则该 db
变量会很有用。然而,它实际上只用于打开db文件。
您可以使用
Run
的 WScript.Shell
方法在 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
声明即可运行
其实很简单:
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
无需复杂! 只需创建一个批处理文件,其中包含要打开的数据库的地址 然后写下这一句代码: 调用 Shell(“批处理文件地址”) 仅此而已!!!