1
VBAを使用して、テキストファイルからデータのサブセットを提供するExcelクエリテーブルを作成しようとしています。クエリテーブルConnection
としてJet OLEDB接続文字列を使用したいと思います。なぜこれは失敗するのですか?ExcelのQueryTableでテキストファイルのソースがJet OLEDBの接続文字列で失敗します。
ここに手順があります。
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
私はADOのレコードセットを作成し、クエリテーブル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
私はクエリテーブルConnection
としてMicrosoftテキストODBCドライバの接続文字列を使用する場合にも動作します。しかし、これは少し遅く動作するように見え、私は実際のコードで700Kのレコードを読んでいます。さらに、私は決してクエリテーブルへの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
大変感謝しています。
(これは機能していないようです)プロバイダ指定子を接続文字列の先頭に追加するだけです。私はそれを試していないと信じられない。 [documentation](https://msdn.microsoft.com/en-us/library/office/ff837764.aspx)は、「ODBC;」の要件を指定しています。 ODBC接続文字列の先頭にありますが、OLEDBには指定しません。どうもありがとう! – JBStovers
@JBSトゥーバーズ - 正直言って、暗闇の中で刺すようなことは、「これがうまくいくかどうかは疑問だ。 – Comintern