文本文件上的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]"