从 Excel VBA 打开 Access

问题描述 投票:0回答:6

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

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

ms-access excel vba
6个回答
7
投票

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

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

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

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

更新 - 问题的最终解决方案,来自下面的评论
这可能是因为变量超出了范围;将

db
的声明移至函数外部,移至模块级别


3
投票

代码通过创建分配给对象变量的应用程序实例来启动 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

1
投票

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


1
投票

删除

New
声明即可运行


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

0
投票

无需复杂! 只需创建一个批处理文件,其中包含要打开的数据库的地址 然后写下这一句代码: 调用 Shell(“批处理文件地址”) 仅此而已!!!

© www.soinside.com 2019 - 2024. All rights reserved.