読者です 読者をやめる 読者になる 読者になる

Access + Excel VBA データ読み込み 書き換えテスト

VBA応用(ADOでデータを取得する。)

このサイトいいなー。

 

<<前提条件>>

・参照設定から Microsoft ActiveX DatObjexts XX Lirary

のライブラリを読み込む

(最新バージョンでOK)

 

Excel xlsm と Access.accdb

は同じフォルダに保存しておく。

今回のサンプルコードの関係上、カレントディレクトリからパスを読み込むので。

 

 

 

 

 

 

Sub DB_Read()
    Dim adoCON      As New ADODB.Connection
    Dim adoRS       As New ADODB.Recordset
    Dim strSQL      As String
    Dim odbdDB      As Variant
    Dim wSheetName  As Variant
    Dim i           As Integer
    
    'カレントディレクトリのデータベースパスを取得
    odbdDB = ActiveWorkbook.Path & "\sample.accdb"

赤字のファイルを変更

 


    
    'データベースに接続する
    adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
                        & "Data Source=" & odbdDB & ""
    adoCON.Open

    'トランザクション開始
    adoCON.BeginTrans
    
    'カーソルをクライアント側に設定
    adoRS.CursorLocation = adUseClient
    
    'DB接続用SQL
    strSQL = "SELECT T_item.* FROM T_item ORDER BY T_item.ID;"

今回は詳しくは知らないので、 T_item レコードで設定

.ID 項目が気になったので念のためIDフィールドを挿入。

もしかしたら、いらなかったかもしれない

データ型は、数値
DBのレコード名は合わせた    


    'レコードセットを開く
    adoRS.Open strSQL, adoCON, adOpenDynamic

    'アクティブなシート名を取得
    wSheetName = ActiveSheet.Name
     
    'スタート行をセット
    i = 3
    
    'テーブルの読み込み
    Do Until adoRS.EOF  'レコードセットが終了するまで処理を繰り返す
        With Worksheets(wSheetName)
            .Cells(i, 1).Value = adoRS!ID
            .Cells(i, 2).Value = adoRS!商品名
            .Cells(i, 3).Value = adoRS!品番
            .Cells(i, 4).Value = adoRS!単価
            .Cells(i, 5).Value = adoRS!入数
        End With

この赤字部分がAccessのフィールド名を読んでいるのか?

それとも、シートの名前を読んでいるのかはわからないので

一応合わせておいた
        i = i + 1       '行をカウントアップする
        adoRS.MoveNext  '次のレコードに移動する
    Loop
    
    'トランザクション終了
    adoCON.CommitTrans
    
    'クローズ処理
    adoRS.Close
    Set adoRS = Nothing
    adoCON.Close
    Set adoCON = Nothing
        
End Sub

 

変更内容

Accessファイルのファイル名

・レコード名を合わせた

・ライブラリを使用した