| 
    
     |  | ▼mickeypapa さん: こんばんは。
 >ichinoseさんの仰るとおりAccessを使うのがいいかと思い昨年末から
 >Accessの本を購入して少しずつ勉強を始めております。
 >しかしながら、今までExcelのVBAを覚えはじめ、入力フォーム作成から始まり
 >品名一覧、運賃表、日報、請求書などExcelVBAでなんとか作り込んできました。
 なるほど、ではExcelでのVBAということで・・・。
 実は、私は普段、mdbファイルの接続にDAOは使っていません(ADOを使っています)。ADOの方を先だったという理由なんですが。
 で、あまりDAOオブジェクトそのものを操作しない方法で考えました。
 mdbからExcelへの出力も整理して記述します(ちょっと変更もあるので)。
 
 尚、DAOの参照設定は前回と同様です。
 
 '============================================================
 Sub DAO_read()
 'Microsoft DAO 3.6 Object Library 参照設定
 Dim myDb    As DAO.Database
 Dim myRst   As DAO.Recordset
 Dim myFileName As String
 Dim myTblsql As String
 myFileName = "運送.mdb"      '読み込むファイル
 myTblsql = "SELECT * FROM 運送DATA WHERE [月 日] Between #2004/10/1# And date();"
 ' mytblnameではおかしいので変数名変えました
 ' それから、Sqlもちょっと簡単にしました
 ' 実際には Sql中の2004/10/1は、変数を使わなくてはなりませんね!!
 
 Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
 Set myRst = myDb.OpenRecordset(myTblsql)
 With myRst
 For idx = 0 To .Fields.Count - 1
 Cells(1, idx + 1).Value = .Fields(idx).Name
 Next
 '↑フィールド名をセルA1、B1、・・・と書き込んでいます
 '不要なら取ってください
 Range("A2").CopyFromRecordset myRst
 .Close
 End With
 myDb.Close
 Set myRst = Nothing       'オブジェクトの解放
 Set myDb = Nothing
 Range("A65536").End(xlUp).Offset(1, 1).Select
 End Sub
 
 このコードの実行でデータがシートに表示されます。
 このシートのデータを追加や値の変更、又は、削除を行った後に
 以下のコードで書き込みます。
 
 
 '================================================================
 Sub DAO_write()
 '最初に読み込んだレコードをMDBファイルから削除して後、
 'シートの内容をMDBファイルに挿入するというロジックです。
 
 'Microsoft DAO 3.6 Object Library 参照設定
 Dim myDb    As DAO.Database
 Dim myRst   As DAO.Recordset
 Dim myFileName As String
 Dim myTblsql As String
 myFileName = "運送.mdb"      '読み込むファイル
 myTblsql = "delete * FROM 運送DATA WHERE [月 日] Between #2004/10/1# And date();"
 '  ↑シートに表示したレコードは一度削除する
 
 Set myDb = OpenDatabase(ThisWorkbook.Path & "\" & myFileName)
 myDb.Execute myTblsql
 myTblsql = "insert INTO 運送DATA select * FROM [Excel 8.0;Database=" & ThisWorkbook.Path & "\sqltest.xls]" & _
 ".[" & ActiveSheet.Name & "$" & Range("a1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 3).Address(False, flase) & "];"
 
 'Sqltest.Xlsは、このマクロを記述しているExcelブック名です
 '.Resize(,3)となっていますが、私のテストでは3つフィールドで行ったためです。
 '実際のフィールド数に合わせてください。
 '尚、mdbファイルとこのブックは同じフォルダ内にあります。
 'また、mdbファイルへの書き込みはアクティブシートを対象としています。
 
 myDb.Execute myTblsql
 myDb.Close
 Set myRst = Nothing       'オブジェクトの解放
 Set myDb = Nothing
 End Sub
 
 以上です。
 
 繰り返しになりますが、SQL中の「2004/10/1」は、実際には、変数化にしなければ
 なりません。また、DAO_readで使用した変数(例えば、2004/10/1が入っているとすると)は、DAO_writeでも使用します。実際には、日付変数をどこかに保存しておく必要があります(セルに保存しておくのがよいかなあ)。
 
 以上です。提示したコードを実際のMDBファイルの規格に変更して
 確認して下さい。
 
 私がテストした限りでは、追加・変更・削除がMDBファイルのテーブルに
 反映されています。
 
 |  |