Access には、標準モジュールおよびクラス モジュールの 2 種類のモジュールがあります。 Access 95 では、フォームまたはレポートと関連付けられた場合にのみ、クラス モジュールが存在しました。 Access 97 では、データベース ウィンドウの [モジュール] タブにも存在しました。
クラス モジュールを使用して、カスタム オブジェクトの定義を作成します。 クラス モジュールを保存するときの名前が、カスタム オブジェクトの名前になります。 クラス モジュール内で定義したパブリックの Sub および Function プロシージャは、そのオブジェクトのカスタム メソッドになります。 パブリックの Property Let、Property Get、および Property Set プロシージャは、そのオブジェクトのプロパティになります。
クラス モジュール内でプロシージャを定義したら、クラスの新しいインスタンスを作成して新しいオブジェクトを作成できます。 クラスの新規オブジェクトを作成するには、そのクラスで定義された型の変数を宣言します。 たとえば、クラスの名前が ABasicClass の場合、次の方法でその新規インスタンスを作成します。
Dim abc As New ABasicClass
この宣言を含んだコードを実行すると、Visual Basic は新規インスタンスを作成します。 したがって、変数を使って、そのメソッドおよびプロパティを適用できるようになります。 たとえば、ListNames という名前のカスタム メソッドを定義してある場合、次のようにしてそれを適用できます。
abc.ListNames
フォーム ビューでフォームを開くと、ユーザー インターフェイスから、または Visual Basic から、そのフォームのクラス モジュールのインスタンスが作成されます。 つまり、オブジェクトが存在するメモリ内の領域を指定し、そのメソッドを呼び出して、組み込みオブジェクトと同様に、コードからプロパティを設定または返すことができます。 印刷プレビューでレポートを開くときも同じことが当てはまります。
Visual Basic コードでフォームを参照する場合は、通常、フォームのクラスの既定のインスタンスを操作します。 フォームのクラスには、唯一の既定のインスタンスがあります。 また、Visual Basic で、同じフォームのクラスの複数のインスタンスを作成することもできます。 フォームのクラスの複数のインスタンスを作成する場合は、既定以外のインスタンスを作成します。
フォームの既定のインスタンスを作成するには、次の 4 つの方法があります。 既存のフォームを開くには、ユーザー インターフェイスを使用するか、DoCmd オブジェクトの OpenForm メソッドを実行するか、CreateForm メソッドを呼び出して新しいフォームをフォーム ビューに切り替えるか、Visual Basic を使用して既定のインスタンスを参照する型の変数 Form を作成します。 次の例では、[社員] フォームを開き、 Form オブジェクト変数でそのフォームを指しています。
Dim frm As Form
DoCmd.OpenForm "Employees"
Set frm = Forms!Employees
Access では、1 つのステップでフォームを開き、そのフォームのメソッドまたはプロパティ、またはコントロールの 1 つを参照することができるショートカットも用意されています。 次の例のようにして、フォームのクラス モジュールを参照します。
Form_Employees.Visible = True
Form_Employees.Caption = "New Employees"
このコードを実行すると、開いていない場合は、フォーム ビューで [従業員] フォームが開き、フォームのキャプションが "新しい従業員" に設定されます。フォームは、 Visible プロパティを True に明示的に設定するまで表示されません。 このコードを呼び出すプロシージャの実行が終了すると、フォームのこのインスタンスは破棄されます (つまり、フォームが閉じられます)。
[社員] フォームがデザイン ビューで開かれているときにこのコードを実行すると、実行時エラーが発生します。 フォームはフォーム ビューで開くか、まったく開かないかのどちらかにする必要があります。
この構文を使ってフォームのプロパティまたはコントロールの 1 つを変更する場合は、フォームのインスタンスが破棄されると、変更内容も失われます。 フォーム ビューでフォームのプロパティの設定値を変更すると、変更内容は常に失われます。 プロパティは、デザイン ビューで変更し、フォームと共に変更内容を保存する必要があります。
一度にフォームの複数のインスタンスを表示する場合は、フォームのクラスの既定以外の複数のインスタンスを作成できます。 たとえば、社員およびその社員の管理者のレコードを同時に表示する場合があります。 [社員] フォームのクラスから、社員のレコードを表示するために 1 つのインスタンス、管理者のレコードを表示するためにもう 1 つのインスタンスを作成できます。
Visual Basic でフォームのクラスの新しい既定以外のインスタンスを作成するには、型がフォーム クラス モジュールの名前の変数を宣言します。 変数の宣言に、キーワード New を含める必要があります。 たとえば、次のコードは、[社員] フォームの新規インスタンスを作成し、それを型が Form の変数に割り当てます。
Dim frm As New Form_Employees
フォームの既定以外のインスタンスは、明示的に "Visible/可視" プロパティが設定されるまで表示されません。
このインスタンスを作成するプロシージャの実行が終了すると、変数をモジュール レベル変数として宣言していない場合、インスタンスはメモリから削除されます。 モジュール レベル変数は、[実行] メニューの [リセット] コマンドまたはツールバーの [リセット] ボタンでリセットされるまでその値を保持するので、変数がモジュール レベル変数として宣言されていれば、フォームは開いたままになります。
設定したプロパティは、フォームのクラスのこのインスタンスに反映されますが、フォームと共に保存されません。 また、フォームのクラスの新規インスタンスは、フォームがデザイン ビューで開かれた場合には作成できません。
フォームのクラスの既定以外のインスタンスは、 Forms コレクション内の名前で参照できません。 インデックス番号でのみ参照してください。 フォームの既定以外のインスタンスを複数作成でき、各インスタンスは同じ名前を持つため、 Forms コレクション内に同じ名前のフォームが複数存在する可能性があり、インデックス番号以外にそれぞれを区別する方法はありません。
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。