トップ > スキル : アプリケーション > VBA for Access > 基礎編(プロシージャの作成)

VBA_Access

プロシージャの作成

VBEの起動

VBAの記述をするには、VBE(Visual Basic Editor)を起動する必要があります。アクセスを起動して、「VBA練習」という新規ファイルを作成します。
[データベースツール]タブを選択して、[マクロ]グループの[Visual Basic]ボタンをクリックします。

VBEウィンドウが表示されます。
「プロジェクト」、「プロパティ」、「イミディエイト」ウィンドウが表示されていることを確認します。
表示されていない場合は、メニューの[表示]から表示させます。

標準モジュールの作成

VBEから標準モジュールを作成します。

宣言なしの変数を使用不可にする

変数の宣言を行わなくても変数を使用することはできますが、宣言なしの変数を使用できない設定をすることで、変数名の入力間違いによるエラーを回避することができます。
メニュー[ツール]から[オプション]をクリックします。
[オプション]ダイアログボックスが表示されますので、「変数の宣言を強制する」にチェックを入れて、[OK]ボタンをクリックします。

標準モジュールの挿入

メニュー[挿入]をクリックして、[標準モジュール]をクリックします。

「Module1」が作成され、新しいコードウィンドウが表示されます。

プロシージャの作成(システム日付)

システムの日付が代入されるプロシージャを作成します。このプロシージャは、イベントに関係ないSubプロシージャで記述します。記述方法は以下のようになります。

	Public Sub プロシージャ名()
		処理1(ステートメント)
		処理2(ステートメント)
	End Sub
	

※ Publicで宣言されたプロシージャは、データベース上のほかのモジュールからも利用できます。
次のようにプロシージャを作成します。スペルに気をつけてコードウィンドウに記述します。

上の2行は宣言構文です。変数の宣言は必ず行うことが設定されています。
「日付表示」プロシージャの説明は以下の通りです。

1行目:日付データを格納する入れ物(変数)の名前はDateBoxであることを宣言。
2行目:変数DateBoxに本日の日付を代入。
3行目:変数DateBoxに格納している日付を出力する。

動作の確認

カーソルをプロシージャ内にあることを確認して、ツールバーの[Sub/ユーザ フォームの実行]ボタンをクリックします。

イミディエイトウィンドウにシステム日付が表示されます。

MsgBox関数

イミディエイトウィンドウは、プロシージャを作成中に現在の結果を確認する場合に利用しますが、完成されたプロシージャの処理結果は、メッセージボックスなどで表示するか、指定したフォームのテキストボックスに代入させて表示するのが一般的です。
メッセージボックスを表示するには、「MsgBox関数」を使用します。

MsgBox関数

整数型 (Integer) の値を返します。ダイアログ ボックスにメッセージを表示し、ボタンがクリックされるのを待って、どのボタンがクリックされたのかを示す値を返します。

構文)MsgBox(prompt[,buttons] [,title] [,helpfile,context])

指定項目 内容
prompt 省略できません。メッセージとして表示する文字列を示す文字列を指定します。指定できる最大文字数は、1 バイト文字で約 1,024 文字です。ただし、使う文字の文字幅に依存します。
buttons 省略可能です。表示されるボタンの種類と個数、使用するアイコンのスタイル、標準ボタンなどを表す値の合計値を示す数式を指定します。省略すると、既定値0になります。
title 省略可能です。ダイアログボックスのタイトルバーに表示する文字列を示す文字列式を指定します。省略すると、タイトルバーにはアプリケーション名が表示されます。
helpfile 省略可能です。ダイアログボックスに状況依存のヘルプを設定するために、使用するヘルプファイルの名前を示す文字列式を指定します。指定した場合は、引数 contextも指定する必要があります。
context 省略可能です。ヘルプトピックに指定したコンテキスト番号を表す数式を指定します。
設定値
定数 内容
vbOKOnly 0 [OK] ボタンのみを表示します。
vbOKCancel 1 [OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore 2 [中止]、[再試行]、および [無視] の 3 つのボタンを表示します。
vbYesNoCancel 3 [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。
vbYesNo 4 [はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel 5 [再試行] ボタンと [キャンセル] ボタンを表示します。
vbCritical 16 警告メッセージ アイコンを表示します。
vbQuestion 32 問い合わせメッセージ アイコンを表示します。
vbExclamation 48 注意メッセージ アイコンを表示します。
vbInformation 64 情報メッセージ アイコンを表示します。

最初のグループに属する値(0~5)は、ダイアログボックスに表示されるボタンの種類と個数を指定します。次のグループに属する値(16、32、48、64) は、アイコンの種類を指定します。名前付き引数buttonsの値を設定するには、各グループから値を1つずつ選択して加算した合計値を指定します。

※ ここに示した定数はVisual Basic for Applications で設定されています。したがって、これらの定数はコード内の任意の場所で実際の値を記述する代わりに使用できます。

戻り値

戻り値とは、ユーザによってクリックされたボタンの種類をAccessに渡す数値を言います。例えば、メッセージボックスに、[OK]と[キャンセル]の2つのボタンがあるとき、ユーザが[OK]ボタンをクリックしたとき、Access側には定数「vbOK」、数値なら「1」が返されます。[キャンセル]ボタンをクリックしたときは、定数「vbCancel」または「2」が返されます。

定数 説明
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]

先ほどの日付表示プロシージャを書き換えて、メッセージボックスでシステム日付が表示されるようにします。
次のように変更します。

記述できたら、実行ボタンをクリックして動作を確認します。
メッセージボックスが表示され、本日の日付が表示されます。

また、以下のように記述すると文章として日付を表示させることができます。

InputBox関数

プロシージャを実行するたびに、処理に必要な値をユーザに入力させることができます。入力を促す場合は、InputBox関数を使用します。

InputBox関数

文字列型(String)の値を返します。ダイアログボックスにメッセージとテキストボックスを表示し、文字列が入力されるか、またはボタンがクリックされると、テキスト ボックスの内容を返します。

構文)InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

指定項目 内容
prompt 省略できません。ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。指定できる最大文字数は、1バイト文字で約1,024文字です。ただし、使う文字の文字幅に依存します。
title 省略可能です。ダイアログボックスのタイトルバーに表示する文字列式を指定します。省略すると、タイトルバーにはアプリケーション名が表示されます。
default 省略可能です。ユーザが何も入力しない場合に、テキストボックスに既定値として表示する文字列式を指定します省略すると、テキストボックスには何も表示されません。
xpos 省略可能です。画面の左端からダイアログボックスの左端までの水平方向の距離を、twip単位で示す数式を指定します。省略すると、ダイアログボックスは水平方向に対して画面の中央の位置に配置されます。
ypos 省略可能です。画面の上端からダイアログボックスの上端までの垂直方向の距離を、twip単位で示す数式を指定します。省略すると、ダイアログボックスは垂直方向に対して画面の上端から約1/3の位置に配置されます。
helpfile 省略可能です。ダイアログボックスに状況依存のヘルプを設定するために、使用するヘルプ ファイルの名前を示す文字列式を指定します。指定した場合は、名前付き引数contextも指定する必要があります。
context 省略可能です。ヘルプトピックに指定したコンテキスト番号を表す数式を指定します。

日付表示プロシージャを次のように書き換えます。

記述したら実行します。
入力ボックスが表示されます。適当な日付を入力して、[OK]ボタンをクリックします。

入力した日付から1週間後の日付が表示されます。

実行時エラー

先ほどの入力ボックスで、[キャンセル」ボタンをクリックします。

エラー表示されます。エラーが発生するとエラー情報としてエラー番号を取得します。このエラー番号を使って処理を分岐することで、処理を無効にしたり、ユーザに注意を促すメッセージを表示したりできます。

エラーを回避するには、以下のように記述することで実現できます。この記述は一つの例で、様々な記述方法があります。エラーの原因などを表示させることもできます。