编辑:这个问题的答案可以在接受的答案的评论中找到。
我试图通过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宏,它在打开时自行运行一些测试。
答案 0 :(得分:7)
请勿尝试打开Access应用程序;只需使用一种数据访问技术创建连接对象: - OLE-DB或 - ODBC。
Google“ODBC连接字符串”或“OLE-DB连接字符串”,以根据您的特定配置(和访问文件类型)获取详细信息。
可能ADODB是用于数据访问的最简单的当前库。
<强>更新强> 尝试从Access导入数据,然后使用数据 - &gt;从Access 向导。 Yu总是可以使用宏重新编码工具为您自动生成一些VBA代码,这将为您创建一些基础架构;我在探索VBA对象模型的新部分时经常使用它。
更新 - 问题的最终解决方案,来自以下评论
这可能是因为变量超出了范围;将db
的声明移到函数之外,转到模块级
答案 1 :(得分:2)
代码通过创建分配给对象变量的应用程序实例来启动Access。在过程结束时,变量超出了范围,因此Access关闭。
您接受了为Access应用程序实例使用模块级变量的答案。在这种情况下,Access将在过程结束后继续运行。但是,如果用户退出Excel,Access也将关闭。
如果目标是启动Access并使其保持运行直到用户决定关闭它,则只需直接启动Access而不将应用程序实例分配给对象变量(Set db = New Access.Application
)。如果您的Excel代码将其用于其他目的,那么db
变量将非常有用。但是,它实际上只用于打开db文件。
您可以使用Run
的{{1}}方法在Access会话中打开您的db文件。
WScript.Shell
答案 2 :(得分:1)
删除New
声明然后它可以正常工作
答案 3 :(得分:0)
我知道这是一个旧线程,但是如果您尝试打开Access数据库,但是如果没有单击两个特定的引用,则会在Excel VBA中出现此错误。 (VBA编辑器屏幕上的工具,参考)。您需要单击“Microsoft Access 15.0对象库”和“Microsoft ActiveX数据对象6.1库”。
答案 4 :(得分:0)
实际上非常简单:
Dim cnn As ADODB.Connection 'Requieres reference to the Microsoft
Dim rs As ADODB.Recordset 'ActiveX Data Objects Library
Set cnn = CreateObject("adodb.Connection")
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb;"
Set rs = cnn.Execute("SELECT * FROM MyTable")
While Not rs.EOF
Debug.Print rs(1)
rs.MoveNext
Wend