Accessテクニックのホームへ戻る

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

 

ワークシートにレコードセットをコピーする

 

Accessの商品テーブルから作成したレコードセットをワークシートにコピーします。Accessのフォームを開いたら、[ワークシートにレコードセットをコピー]のボタンをクリックします。商品テーブルのクエリから作成したレコードセットがワークシートにコピーされます。このサンプルは、RangeオブジェクトのCopyFromRecordSetメソッドを使用して商品テーブルのレコードセットをワークシートにコピーしています。

 

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW181.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/DAORecordsetのオブジェクトを指定します。このサンプルでは、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

 

ダウンロード (181.lzh)