文本文件上的Excel QueryTable源与Jet OLEDB连接string失败

使用VBA,我试图创build一个Excel查询表来提供一个文本文件的数据的子集。 我想使用Jet OLEDB连接string作为查询表Connection 。 为什么这会失败?

这是程序。

 Sub OledbTest1() 'FAILS. 'Create querytable with oledb connect string. Const strConn = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\RSJCB\Desktop\;" & _ "Extended Properties=""text;HDR=Yes;FMT=Delimited""" Dim wsht As Worksheet Set wsht = ThisWorkbook.Worksheets.Add() With wsht 'The next line errors with 1004: Application-defined of object-defined error .QueryTables.Add strConn, .Range("A1"), "SELECT TOP 10 * FROM [TestFile.csv]" .QueryTables(1).Refresh End With Set wsht = Nothing End Sub 

连接string工作,如果我用它来创build一个ADOlogging集,然后使用该logging集作为查询表Connection

 Sub OledbTest2() 'SUCCEEDS. 'Create querytable with ado recordset opened using oledb connect string. Const strConn = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\RSJCB\Desktop\;" & _ "Extended Properties=""text;HDR=Yes;FMT=Delimited""" Const strSql = "SELECT TOP 10 * FROM [TestFile.csv]" Dim wsht As Worksheet Dim rst As New ADODB.Recordset rst.Open strSql, strConn Set wsht = ThisWorkbook.Worksheets.Add() With wsht 'The next line errors with 1004: Application-defined of object-defined error .QueryTables.Add rst, .Range("A1") .QueryTables(1).Refresh End With Set wsht = Nothing Set rst = Nothing End Sub 

如果我使用Microsoft Text ODBC驱动程序连接string作为查询表Connection它也可以工作。 但是,这似乎工作慢一点,我正在阅读实际代码中的700Klogging。 此外,我从来没有能够build立一个OLEDB连接到查询表,并想知道如何做到这一点。

 Sub OdbcTestQtbl() 'SUCCEEDS. 'Create querytable with odbc connect string. Const strConn = _ "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ "Dbq=C:\Users\RSJCB\Desktop\;" & _ "Extensions=asc,csv,tab,txt;" Dim wsht As Worksheet Set wsht = ThisWorkbook.Worksheets.Add() With wsht .QueryTables.Add "ODBC;" & strConn, .Range("A1"), "SELECT TOP 10 * FROM [TestFile.csv]" .QueryTables(1).Refresh End With Set wsht = Nothing End Sub 

非常感谢你的帮助。

您需要让Excel知道该驱动程序是一个OLEDB驱动程序。 只需将(显然未公开的)提供程序说明符附加到连接string的开头:

 .QueryTables.Add "OLEDB;" & strConn, .Range("A1"), "SELECT TOP 10 * FROM [TestFile.csv]"