2013-05-01 154 views
6

编辑:这个问题的答案可以在接受的答案的评论中找到。从Excel中打开Access VBA

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

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

你试图运行Access GUI Excel内部,或只是想连接到数据库和查询里面的数据? – 2013-05-01 03:39:15

+0

我只是简单地为用户提供对数据库的访问。我是VBA的EXTREMElY新手,甚至不知道Acess GUI是什么。数据库基本上是一个计划婚礼的独立工具。 excel和访问文件最终将通过导入链接。 – 2013-05-01 03:48:17

回答

6

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

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

ADODB可能是目前最容易使用的数据库。

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

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

+0

我很快浏览了Google上的一些结果,不知道有什么在谈论或从哪里去。这个项目是为了在学校介绍VBA课程,所以我刚开始学习。 另外,我认为我上面有关导入的评论可能会混淆我的意图。我为婚礼策划设计了一个数据库,用于管理客人名单,供应商和其他一些事情。我正在处理的excel文件现在更多地处理婚礼的财务方面(建模,最小最大主要是计算等)。我真的只是想打开访问文件,没有别的。 – 2013-05-01 04:03:55

+0

如果OP是VBA的新手,就像他说的那样,导航记录集可能有点难以咀嚼。 – ApplePie 2013-05-01 04:20:14

+1

@ AlexandreP.Levasseur:取点;发布更新。 – 2013-05-01 04:33:11

1

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

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

如果目标是启动Access并保持运行状态,直到用户决定关闭它,只需直接启动Access而无需将应用程序实例分配给对象变量(Set db = New Access.Application)。如果您的Excel代码需要它用于其他目的,那么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 
+0

我试过这个方法,它给出了一个运行时错误“Method'Run'Object'IWshShell3'failed ... – SandPiper 2016-09-13 12:50:15

0

我知道这是一个古老的线程,但如果你试图打开Access数据库,你会得到在Excel VBA这个错误,但你没有两个具体参考点击。 (工具,VBA编辑器屏幕上的参考)。您需要单击“Microsoft Access 15.0对象库”和“Microsoft ActiveX数据对象6.1库”。

0

取出New声明,然后它工作