はじめに
Visual Basicが独自のクラスを作成して使えるように、Officeに搭載されているVBAでも独自のクラスをプロジェクトに組み込むことができます。作成したクラスは、各Officeアプリケーションで「インポート」「エクスポート」ができるため、汎用性のあるクラスを1つ作成すれば他のアプリケーションのVBAでも利用できるようになります。
そこで、Access VBAでクラスを作成し、データベースファイルに作成されているクエリを実行して結果セットのデータをExcelに転送するマクロを作成しながら、VBAでクラスを作る方法を紹介します。
なお、この記事は『Excel VBAではじめるクラス入門』の続編にあたります。クラスを使うメリット、クラスの作成手順は『Excel VBAではじめるクラス入門』でご確認ください。
対象読者
Access VBA、Excel VBAを使ってマクロ(プログラム)を作ったことがある人、Visual Basicが使える人が対象です。
必要な環境
Excel・Access 2000/2002/2003が使用できる環境。
Access VBAでクラスを作る
では、Access 2003で1つクラスを作成してみましょう。このクラスは、データベースファイルに作成されているクエリを実行し、結果のレコードをExcelに転送します。
使用するデータベースファイルは、Access 2000のサンプルに付いている「Northwind.mdb」から抜粋したテーブルとクエリを格納している「sample.mdb」です(Access 2000形式で保存してあります)。このファイルにクラスを組み込み、実行プロシージャを作成します。
クラスとプロパティの作成
作り方はいたって簡単です。Accessを起動し、「sample.mdb」を読み込んでください。
Accessのメニューで[ツール]-[マクロ]-[Visual Basic Editor]を選び、VBEditorを起動して、プロジェクトにクラスモジュールを1つ追加します。
VBEditorの[ツール]-[参照設定]メニューを選び、「Microsoft Excel 11.0 Object Library」にチェックを付け、[OK]ボタンを押します。
今回は、AccessからExcelオブジェクトを操作するため、コードの中でExcelのオブジェクトと保有するプロパティ・メソッドを参照します。そのために、あらかじめExcelへの参照設定を行っておきます。
プロパティウィンドウでオブジェクト名を「clsTrans」に変更します。作成するクラスは、2つのプロパティを持ちますので、これをコードウィンドウの宣言セクションで宣言します。
Public QryName As String Public SaveBookName As String
プロパティの1つは、データベースに組み込まれているクエリ名を設定するプロパティで、もう1つは、データを転送したExcelのブックを保存する際のブック名を設定するプロパティです。いずれも文字列型の変数で宣言します。