打开Excel VBA中的访问权限

8

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

我试图从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宏,在打开时运行一些自身测试。


你是想在Excel中运行Access GUI,还是只是尝试连接到数据库并查询其中的数据? - Pieter Geerkens
我只是为用户提供对数据库的简单访问。我在VBA方面非常初学,甚至不确定Acess GUI是什么。该数据库基本上是一个规划婚礼的独立工具。最终,Excel和Access文件将通过导入进行链接。 - Bradley Carrico
5个回答

7
不要尝试打开Access应用程序,只需使用以下数据访问技术之一创建连接对象: - OLE-DB或 - ODBC。
根据您的特定配置(和Access文件类型),请搜索“ODBC连接字符串”或“OLE-DB连接字符串”以获取详细信息。
可能ADODB是当前最容易使用的库,用于访问您的数据。
更新: 尝试从Access导入数据,然后使用“数据->来自Access”向导。您始终可以使用宏记录工具自动生成一些VBA代码,为您创建一些基础设施;当我探索VBA对象模型的新部分时,我经常使用此功能。
更新-来自下面的评论的最终解决方案: 这可能是因为变量超出了范围;将db的声明移到函数外部,到模块级别。

我很快地浏览了一下谷歌上的一些结果,但是我不知道它们在说什么或者该从哪里开始。这个项目是为学校的VBA入门课程而设计的,所以我刚刚开始学习。另外,我认为我上面关于导入的评论可能会让人们对我的意图感到困惑。我设计了一个婚礼策划的数据库,管理客人名单、供应商和其他一些事情。我现在正在处理的Excel文件更多地涉及婚礼的财务方面(建模、最小最大值计算等)。我真的只想能够打开Access文件,什么都不用做。 - Bradley Carrico
如果OP是一个极其初学者,那么在VBA中浏览记录集可能会有点难以理解。 - ApplePie
是的,录制宏是学习的好方法。然而,我目前并不想导入任何东西。我所希望实现的只是提供一种替代方法,而不是去桌面上打开文件。我想要打开文件,然后什么也不做。就像我在问题中所说的那样,似乎提供的代码打开了访问权限,但立即关闭了它。 - Bradley Carrico
2
可能是因为变量超出了作用域;将 db 的声明移到函数外部,到模块级别。 - Pieter Geerkens
好像已经解决了!非常感谢,对于所有的混乱我很抱歉。 - Bradley Carrico

3
代码通过创建应用程序实例并将其分配给一个对象变量来启动Access。在过程结束时,变量超出范围,因此Access关闭。
您接受了使用模块级变量作为Access应用程序实例的答案。在这种情况下,过程结束后Access仍然运行。但是,如果用户退出Excel,则Access也会关闭。
如果目标是启动Access并使其保持运行状态,直到用户决定关闭它,请直接启动Access而不将应用程序实例分配给对象变量( Set db = New Access.Application )。如果您的Excel代码需要它进行其他用途,那么该 db 变量将很有用。但是,它实际上只用于打开db文件。
您可以使用WScript.Shell Run 方法在Access会话中打开您的db文件。
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

我尝试了这种方法,但它给了我一个运行时错误:“对象'IWshShell3'的方法'Run'失败...” - SandPiper

1

移除New的声明,然后它就可以工作了。


1

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


1
实际上很简单:
Private Sub bttnToAccess_Click()
 db = DBEngine.OpenDatabase("C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb") 
End Sub

为了让这个工作正常运行,你需要在模块级别上将db声明为Database。
 Dim db As Database  'Requires reference to the Microsoft
                     'Access Database Engine Object Library

db需要是DAO(数据访问对象),而不是ADO(Active X数据对象)! - ComputerVersteher
@ComputerVersteher 很好的发现! - user3103059
常见的缺陷。在DAO/ADODB对象上始终要声明库。 - ComputerVersteher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接