Microsoft Access Club >関数を使いこなす >このページ >次頁 < 前項


どこで実行するの-他のプロシージャ内編 : 関数を使いこなす



前回は、新しいクエリフィールドに関数を配置し計算値を表示させる方法をご紹介しました。これは正に関数の醍醐味でしたね。

今回は、最も利用機会が多いであろうと思われる「他のプロシージャ内で実行させる方法」をご紹介します。これらは大きく分けると2通りに分類できます。

  1. 標準モジュール内での使用
  2. クラスモジュール内での使用

モジュールの基本構成

VBAを記述する範囲全てを モジュール と呼んでいます。これらは、以下のような構成になっています。

  1. 変数や定数を宣言する宣言セクション。

  2. 1つ以上のプロシージャ。

下図の赤丸部分が宣言セクション、青丸部分がプロシージャになります。

標準プロシージャ

標準プロシージャは、FunctionプロシージャまたはPublic Subプロシージャとお考え下さい。これらは、データベースウィンドウのモジュールエリアに記述します。

クラスモジュール

クラスモジュールは、フォームの開く時イベントプロシージャやレポートの空データイベンプロシージャ などがあり、各オブジェクトのイベント類とタイアップするような形で動作します。Private Subプロシージャとお考え下さい。

上図は、Functionプロシージャ、つまり標準モジュール内に記述しています。下図は、Private Subプロシージャ、つまりクラスモジュール内(フォームの開く時イベント)に記述しています。

Functionプロシージャの作成

では、前置きはこの辺で終了して、本題に入りましょう。下記のFunctionプロシージャ(関数)をご覧下さい。

Function ErrorMsg()

    Dim strmsg As String
    Dim strtitle As String
    
    strmsg = "予期せぬエラーが発生しました。処理を中止します。"
    strtitle = "エラー発生"

    MsgBox strmsg, vbOKOnly, strtitle
    
End Function

このプロシージャをイミディエイト画面で実行すると、下記のようなダイアログが表示されます。

Accessが最初から持っている関数をAccessの組み込み関数と呼びます。MsgBox関数、InputBox関数、Left関数などが該当します。これら関数は事前準備など全く不要で、いきなり使い出しても全然問題ありません。

他のプロシージャに組み入れる

では、このErrorMsgプロシージャを他のプロシージャに組み入れてみましょう。

Private Sub Form_Open(Cancel As Integer)

On Error GoTo エラー
    
    Beep '音を鳴らします。
    Err.Raise 259 '強制的にエラーを発生させます。
    
    Exit Sub
    
エラー:

    Call ErrorMsg
    Cancel = True '処理をキャンセルします。

End Sub
解説

Callステートメントを用いて、他のプロシージャであるErrorMsgプロシージャを呼び出しています。プロシージャ内で他のプロシージャを呼び出す時は、このような形態をとります。

他のプロシージャを取り込むメリットは、以下のようなことが考えられます。

  1. 一つのプロシージャを複数回利用が可能になる。

  2. プロシージャの修正等の保守管理が簡潔になる。

  3. コードが読みやすく、バグの発生がすくなくなる。

ちょっと、休憩
Callステートメントの記述がなく、ぽつんとプロシージャ名を記述するだけでもちゃんと動作しますが、プロシージャの内容を分かり易くするためにも必ずCallステートメントを記述するようにしましょう。

下記のプロシージャも問題なく動作します。

Private Sub Form_Open(Cancel As Integer)

On Error GoTo エラー
    
    Beep '音を鳴らします。
    Err.Raise 259  '強制的にエラーを発生させます。
    
    Exit Sub
    
エラー:

    ErrorMsg
    Cancel = True '処理をキャンセルします。

End Sub
引数の処理

引数を指定する ( ) 内は記述しなくていいのか? とお思いかと思いますが、引数が無い時はたとえ記述しても消えてしまいます。ご安心あれ !!

まとめてプロシージャを記述する

このように、プロシージャからプロシージャを呼び出せば、一つのプロシージャ自体が簡潔になります。試しに、上記の2つのプロシージャをまとめて記述してみましょう。

Private Sub Form_Open(Cancel As Integer)

On Error GoTo エラー
    
    Dim strmsg As String
    Dim strtitle As String
    
    strmsg = "予期せぬエラーが発生しました。処理を中止します"
    strtitle = "エラー発生"
    
    Beep '音を鳴らします。
    Err.Raise 259 '強制的にエラーを発生させます。
    
    Exit Sub
    
エラー:

    MsgBox strmsg, vbOKOnly, strtitle
    Cancel = True '処理をキャンセルします。
    
End Sub

よく使うと思われるプロシージャの場合は、独自関数として標準プロシージャを作成しましょう。

次回は、フォームやレポート上にあるオブジェクト(テキストボックス等)のコントロールソース や、各イベントに配置する方法をご紹介します。

2003/06/11

ページの先頭へ 前ページへ戻る


どこで実行するの-他のプロシージャ内編 : 関数を使いこなす


 

-Microsoft Access Club-

動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。データセンター設置場所はアメリカ合衆国です。: 動画サーバードットコム
動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。
データセンター設置場所はアメリカ合衆国です。
100Mbps〜1Gbpsまで対応できます。