CopyFromRecordsetを使用しても
・シートにデータが貼り付けられない
ときがあります!
※SQLiteで起きました。
原因は
・テーブルの列の型(TYPE)をSQLite標準の型(TEXT等)
にしているためです!
テーブルの列の型(TYPE)
・varchar(255)
等にすると解決します
原因
テーブルの列の型(TYPE)がSQLite標準の型(TEXT等)だと、「Rangeオブジェクト」の「CopyFromRecordset」メソッドでデータが貼り付けられません。
※理由は不明です。
解決方法
テーブルの列の型(TYPE)を「varchar(255)」等にすると貼り付けられるようになります。
動作確認
以下のVBAコードにより
・CopyFromRecordsetでSQLiteのデータをシートへ貼り付ける
ことができました(27行目)。
Option Explicit
Sub sample()
Dim ws As Worksheet
Dim dbName As String
Dim conStr As String
Dim sql As String
Dim con As Object
Dim rs As Object
'シート
Set ws = Worksheets("sample")
'DB名(SQLiteのファイル名)
dbName = "C:\Users\user\Desktop\sampleDB.db"
'接続文字列
conStr = "DRIVER=SQLite3 ODBC Driver;Database=" & dbName
'SELECT文
sql = "select id,name,sex,section from employee"
'DB接続
Set con = CreateObject("ADODB.Connection")
con.Open conStr
'SQL実行
Set rs = con.Execute(sql)
'結果(取得したレコード)をシートに貼付け
ws.Range("B2").CopyFromRecordset rs
'接続を閉じる
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
備考
SQLiteの場合、テーブルの列の型(TYPE)によって挙動が変わってしまうため、「Rangeオブジェクト」の「CopyFromRecordset」メソッドの使用は避けた方がよいと思います。