SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Access 2003 VBAではじめるクラス入門

クエリを実行し結果セットをExcelに転送するマクロの作成


  • X ポスト
  • このエントリーをはてなブックマークに追加

Excelへのデータ転送メソッドの作成

 最初に、クエリ結果の全レコードを一気にExcelに転送するプロシージャToExcelを作成します。これは、引数を持たないSubプロシージャで宣言します。

Public Sub ToExcel()

End Sub

Excelのインスタンスを作成する

 まず、冒頭に、Excelオブジェクトを格納する変数を宣言します。

Dim ex As Excel.Application

 そして、CreateObject関数でExcelのインスタンスを作成します。引数のプログラムIDは「excel.Application」になります。

 関数が無事Excelのインスタンスを作成すると、オブジェクトへの参照を返してきますので、Setステートメントでオブジェクト変数exに格納します。これで、変数exを使ってExcelのすべてのオブジェクトをAccessから操作できるようになります。

Set ex = CreateObject("excel.Application")

 CreateObject関数はExcelのインスタンスを作成するだけなので、ApplicationオブジェクトのVisibleプロパティにTrueをセットして、Excelを表示させます。

ex.Visible = True
ワンポイント・アドバイス
 これから作成するコードでは、ExcelのオブジェクトとAccessのオブジェクトの両方が出てきます。どれがどのオブジェクトやプロパティ・メソッドなのか、間違えないように注意してください。
 

クエリを実行するコードの作成

 次に、プロパティQryName設定されているクエリを実行します。この操作は、DoCmdオブジェクトのOpenQueryメソッドを使用します。

 DoCmdオブジェクトは、Accessのアクションを担当するオブジェクトで、アクションの実行はこのオブジェクトのメソッドで提供されています。

 OpenQueryメソッドは、そのアクションの1つ「クエリを開く」操作を実行するメソッドです。3つの引数を持ち、第1引数に実行するクエリ名、第2引数にクエリの実行形態を、第3引数に編集モードを指定します。ここでは、開くクエリ名にプロパティQryNameをあてて、実行時にクエリ名をセットするようにしています。また、このクラスはデータの取得を目的にしていますので、編集モードはacReadOnlyをセットし読み出し専用で開くようにします。

DoCmd.OpenQuery QryName, , acReadOnly

 このメソッドを実行すると、クエリを開き、選択クエリの場合にはクエリ結果を表示します。

 

クエリ結果をExcelに転送する

 クエリ結果をExcelに転送するには、DoCmdオブジェクトのRunCommandメソッドを使用します。このメソッドは、Accessに組み込まれているメニュー、またはツールバーのコマンドを実行します。引数に実行したいコマンド名を定数でセットします。

 Accessの[ツール]メニューには、[Office Links]-[Excelに出力]というコマンドがあり、これを使うとクエリ結果をそのまますべてExcelに転送できます。

[Office Links]-[Excelに出力]メニュー・コマンド
[Office Links]-[Excelに出力]メニュー・コマンド

 このコマンドを担当するのが、定数acCmdOutputToExcelです。この値をRunCommandメソッドの引数にセットしメソッドを実行すると、Excelに新しいブックを追加しクエリの結果セットをコピーします。

DoCmd.RunCommand acCmdOutputToExcel
ワークシートに転送されたクエリ結果
ワークシートに転送されたクエリ結果

 Excelへの転送が終われば、クエリを閉じます。これは、RunCommandメソッドの引数に定数acCmdCloseをセットして実行します。これは、Accessメニューの[ファイル]-[閉じる]と同じ働きを実行します。

DoCmd.RunCommand acCmdClose

 これで、Excelへのデータ転送を実行するクラスのメソッドToExcelのできあがりです。

ブックを保存する

 次に、ブックを保存する処理を作成します。RunCommandメソッドでExcelへの転送を行った場合は、作成されるブックはクエリと同じ名前のブック名が付けられます。このブックを保存するパス名も含め、独自のファイル名で保存したいので、専用のメソッドを用意しておきます。

 この専用メソッドは、Excelのアクティブなブックを対象に、WorkbookオブジェクトのSaveAsメソッドを実行します。引数に保存するブック名をフルパスで指定しますが、ここではクラスのプロパティSaveBookNameから値をオブジェクト取り出します。

 SaveBookNameプロパティに何も設定されていない場合に備えて、エラー処理を組み込んでおきます。

If SaveBookName <> "" Then
    ex.ActiveWorkbook.SaveAs SaveBookName
Else
    MsgBox "保存するブック名をSaveBookNameプロパティで設定してください"
End If

 最後に、使用したオブジェクト変数をメモリから開放します。

Set ex = Nothing

次のページ
実行プロシージャの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/504 2008/08/19 20:33

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング