2016-12-09 10 views
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 

大変感謝しています。

答えて

2

ドライバにOLEDBドライバがあることをExcelに知らせる必要があります。

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

(これは機能していないようです)プロバイダ指定子を接続文字列の先頭に追加するだけです。私はそれを試していないと信じられない。 [documentation](https://msdn.microsoft.com/en-us/library/office/ff837764.aspx)は、「ODBC;」の要件を指定しています。 ODBC接続文字列の先頭にありますが、OLEDBには指定しません。どうもありがとう! – JBStovers

+0

@JBSトゥーバーズ - 正直言って、暗闇の中で刺すようなことは、「これがうまくいくかどうかは疑問だ。 – Comintern

関連する問題