如何使用VBA从MS-Excel(2010)查询MS-Access表

我想在Excel中编写一些VBA代码来查询Access中的表。 我已经尝试了多个代码示例,如添加的链接,他们似乎都在“打开连接”部分失败。 我曾尝试使用不同的引用,但我不知道我应该使用什么,不同版本(即Microsoft ActiveX数据对象2.0,2.1,…,6.0)之间的区别是什么或提供者信息应该。 对于提供商的信息,我通常看到一些沿线的东西

“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”

但是我不确定这是否是我需要使用的,或者上面显示的提供程序string中的什么/什么条件应该改变。 有人可以教育我如何正确地做这种事情?

注意:如果可能的话,我希望有一个解决scheme可以在无需下载任何其他应用程序的情况下工作,并且可以同时用于Access和Excel 2007和2010版本,因为这需要在具有可能不同版本的办公室的不同计算机上运行。

链接到类似的问题: Excel VBA查询访问失败 http://www.mrexcel.com/forum/showthread.php?t=527490

码:
Sub asdf()

strFile = "C:\Users\bwall\Desktop\Excel Query Access Testing" Dim cn As Object Dim rs As Object Dim strSql As String Dim strConnection As String Dim AppPath As String Set cn = CreateObject("ADODB.Connection") AppPath = Application.ActiveWorkbook.Path strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & AppPath & "\Masterlist_Current_copy.accdb;" Debug.Print strConnection strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];" cn.Open strConnection Set rs = cn.Execute(strSql) MsgBox rs.Fields(0) & " rows in MyTable" rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub 

strConnection值=

Provider = Microsoft.Jet.OLEDB.4.0;数据源= C:\ Users \ bwall \ Desktop \ Excel查询访问testing\ Masterlist_Current_copy.accdb;

如果您的目标数据库是ACCDB格式,Provider部分必须是Provider=Microsoft.ACE.OLEDB.12.0Provider=Microsoft.Jet.OLEDB.4.0仅适用于较旧的MDB格式。

如果你正在运行32位Windows,你甚至不需要安装Access。 Jet 4作为操作系统的一部分。 如果您使用的是64位Windows,则不包括Jet 4,但是您仍然不需要安装Access本身。 您可以安装Microsoft Access数据库引擎2010 Redistributable 。 确保下载匹配的版本(32位Windows的AccessDatabaseEngine.exe或64位的AccessDatabaseEngine_x64.exe)。

您可以通过使用后期绑定来避免有关哪个ADO版本引用的问题,而不需要任何引用。

 Dim conn As Object Set conn = CreateObject("ADODB.Connection") 

然后将您的ConnectionString属性分配给conn对象。 下面是一个从Excel 2003中的代码模块运行的简单示例,并显示一个消息框,其中包含MyTable的行数。 它使用ADO连接和logging集对象的后期绑定,因此不需要设置引用。

 Public Sub foo() Dim cn As Object Dim rs As Object Dim strSql As String Dim strConnection As String Set cn = CreateObject("ADODB.Connection") strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Access\webforums\whiteboard2003.mdb" strSql = "SELECT Count(*) FROM MyTable;" cn.Open strConnection Set rs = cn.Execute(strSql) MsgBox rs.fields(0) & " rows in MyTable" rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub 

如果此答案不能解决问题,请编辑您的问题,向我们显示您正在尝试使用的完整连接string以及针对该连接string得到的确切错误消息。

 Sub Button1_Click() Dim cn As Object Dim rs As Object Dim strSql As String Dim strConnection As String Set cn = CreateObject("ADODB.Connection") strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Documents and Settings\XXXXXX\My Documents\my_access_table.accdb" strSql = "SELECT Count(*) FROM mytable;" cn.Open strConnection Set rs = cn.Execute(strSql) MsgBox rs.Fields(0) & " rows in MyTable" rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub