■ ワークシートにレコードセットをコピーする (2000,2002,2003,2007)

図 ワークシートにレコードセットをコピーする
Accessの商品テーブルから作成したレコードセットをワークシートにコピーします。Accessのフォームを開いたら、[ワークシートにレコードセットをコピー]のボタンをクリックします。商品テーブルのクエリから作成したレコードセットがワークシートにコピーされます。このサンプルは、RangeオブジェクトのCopyFromRecordSetメソッドを使用して商品テーブルのレコードセットをワークシートにコピーしています。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW181.mdbを作成します。
2. テーブル、クエリ、フォーム、モジュールをインポート
Windowsのエクスプローラから、ダウンロードした181.mdbをダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、テーブル(tblProducts)をドラッグしてW181.mdbのデータベースウィンドウにドロップします。同様の手順で、クエリ(qryProducts)、フォーム(frmCopyFromRecordset)、モジュール(basExcelAutomation)をドラッグ&ドロップします。テーブル、クエリ、フォーム、モジュールをインポートしたら、181.mdbを閉じます。
3. ライブラリを追加
データベースウィンドウのオブジェクトから[モジュール]をクリックしたら、[basExcelAutomation]をダブルクリックして、デザインモードで開きます。VBEにモジュールが表示されたら、メニューバーから[ツール]→[参照設定]を選択します。「参照設定」のダイアログが表示されたら、参照可能なライブラリファイルから[Microsoft Excel X.X Object Library]をクリックしてチェックマークを付けます。[OK]ボタンをクリックしてダイアログを閉じます。
Note
|
Access
2000, 2002を使用するときはDAO 3.6のライブラリを追加する Access 2000, 2002を使用するときは、VBEのメニューバーから[ツール]→[参照設定]を選択して、Microsoft DAO 3.6 Object Libraryを追加する必要があります。 |
4. フォームを開く
VBEのツールバーから表示(Access)のアイコン
をクリックして、Accessのウィンドウに切り替えます。データベースウィンドウのオブジェクトから[フォーム]を選択したら、[frmCopyFromRecordset]をダブルクリックして開きます。フォームが開いたら、[ワークシートにレコードセットをコピー]のボタンをクリックします。
Excelが起動されて、ワークシートに商品テーブルのレコードセットがコピーされます。

図 ワークシートに商品テーブルのレコードセットがコピーされる
●解説
ワークシートの列見出しにレコードセットのフィールド名を格納するには、FieldオブジェクトのNameプロパティを使用します。For...Nextループを実行するとセルA1, B1, C1, D1にレコードセットのフィールド名が格納されます。
‘ ワークシートに列見出しを格納する
For intfld = 0 To rst.Fields.Count - 1
.Cells(intRow, intCol).Value = rst.Fields(intfld).Name
intCol = intCol + 1
Next
レコードセットをワークシートにコピーするには、RangeオブジェクトのCopyFromRecordSetメソッドを使用します。Range(“A2”)のように記述すると、セルA2を基点にレコードセットがコピーされます。CopyFromRecordSetの引数には、ADO/DAOのRecordsetのオブジェクトを指定します。このサンプルでは、DAOのレコードセットをコピーしています。
‘ A2を基点にレコードセットをコピーする
.Range("A2").CopyFromRecordSet rst
‘ ワークシートにレコードセットをコピーする
Public Sub CopyFromRecordSet()
Dim intRow As Integer: intRow = 1
Dim intCol As Integer: intCol = 1
Dim intI As Integer
Set db = CurrentDb
‘ 商品クエリのレコードセット作成
Set rst = db.OpenRecordset("qryProducts")
‘ Excelのオブジェクト作成
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Workbooks.Add
‘ レコードセットのフィールド名をワークシートの見出しに格納する
For intfld = 0 To rst.Fields.Count - 1
.Cells(intRow, intCol).Value = rst.Fields(intfld).Name
intCol = intCol + 1
Next
‘ ワークシートのセルA2を基点にレコードセットをコピーする
.Range("A2").CopyFromRecordSet rst
‘ 表を自動フォーマットする
Set rngSelection = .ActiveSheet.UsedRange
rngSelection.Columns.AutoFit
.Visible = True
End With
End Sub