トップ > スキル : アプリケーション > VBA for Access > 応用編(VBAでコントロール操作)
VBAで記述したプログラムは、主にフォーム上のコントロールの操作で活用します。マクロでも簡単に作成できますが、VBAを学習してスキルが上がるとVBAの方で作った方が容易に感じます。また、マクロでは実現できない処理も可能となります。
一般的によく利用されるコントロールの操作は、基本的な活用術となります。
※ このコントロールの操作では、「サンプル.accdb」ファイルを使用します。
フォームを開く
データベースのテーブル、クエリ、フォーム、レポートの各オブジェクトができあがり、動作の確認を終えると後はどのように運用していくかになります。誰にでも扱えるようなシステムにするには、利用するフォーム、レポートだけを利用させるような仕組みを作り上げます。その仕組みとは、Accessというアプリケーションを意識させないように、利用できる操作はメイン画面として1つのフォームにボタン類を配置させておき、そのボタンから使うフォームやレポートを表示させるようにすることです。
ここで使用するメイン画面を以下の図のように作成します。

3つのコマンドボタンを配置します。
標題 | 名前 | 説明 |
---|---|---|
顧客リスト表示 | 顧客リスト | F_顧客リストフォームを開くコマンドボタン |
見積一覧表示 | 見積一覧 | F_見積一覧フォームを開くコマンドボタン |
終了 | 終了 | Accessまで終了させるコマンドボタン |
フォームを開くには、OpenFormメソッドを使用します。
◆ OpenFormメソッド
【書式】
Docmd.OpenForm フォーム名[,表示方法][,クエリ名][,条件式][,データ入力モード][,表示サイズ][,文字列式]
- フォーム名:開くフォーム名を指定(省略不可)。
- 表示方法:デザインビュー(acDesign)、データシートビュー(acFormDS)、フォームビュー(acNormal)、印刷プレビュー(acPreview)から指定。省略した場合はフォームビューになります。
- クエリ名:レコードを絞り込んだクエリ名を指定。
- 条件式:レコードを絞り込んだWhere条件式を指定。
- データ入力モード:フォームのデータ入力モードを指定。追加(acFormAdd)、編集(acFormEdit)、フォームのプロパティによる(acFormPropertySettings)、読み取り専用(acFormReadOnly)の中から指定。省略した場合はフォームのプロパティによるになります。
- 表示サイズ:フォームの表示サイズを指定。ダイアログ(acDialog)、非表示(acHidden)、アイコン(acIcon)、標準(acWindowNormal)の中から指定。省略した場合は標準になります。
- 文字列式:指定した文字列を対象のフォームのプロシージャ内で使うことができる。
イベントプロシージャの作成
メイン画面の「顧客リスト表示」コマンドボタンをクリックすると、「F_顧客リスト」フォームが開くようにイベントプロシージャを作成します。
「F_メイン画面」フォームをデザインビューで開き、「顧客リスト」コマンドボタンを選択します。そのプロパティシートを表示させ、[イベント]タブの[クリック時]プロパティを「イベントプロシージャ」に切り替え、右端のビルドボタンをクリックします。

VBE画面が表示され、[コード]ウィンドウに「Private Sub 顧客リスト_Clikc()」プロシージャのひな型が作成されます。

「F_顧客リスト」フォームを開き、「F_メイン画面」フォームを閉じる動作のプロシージャを作成します。エラートラップ処理も考慮して、次のように記述します。
Private Sub 顧客リスト_Click() On Error GoTo Err_go DoCmd.OpenForm "F_顧客リスト", acNormal DoCmd.Close acForm, "F_メイン画面" Exit_go: Exit Sub Err_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
F_顧客リストを開き、メイン画面は閉じられます。なるだけ、不必要なフォームは閉じた方がユーザは使いやすくなります。
フォームなどを閉じるには、Closeメソッドを使用します。
◆ Closeメソッド
【書式】
Docmd.Close [,オブジェクトの種類],オブジェクト名[,保存の有無]
- オブジェクトの種類:閉じる対象のオブジェクトを指定。フォームであれば「acForm」、レポートであれば「acReport」などを記述します。既定値は、アクティブウィンドウ(acDefault)です。
- オブジェクト名:閉じるフォーム名、レポート名などを指定。
- 保存の有無:閉じる時に変更を保存するかしないかを指定。保存しない時は「acSeveNo」、保存確認ダイアログを表示するには「acSavePrompt」、自動的に保存は「acSaveYes」を記述します。既定値はacSavePromptです。
同様に、見積一覧表示コマンドボタンのクリック時のイベントにも以下のようなプロシージャを作成します。
Private Sub 見積一覧_Click() On Error GoTo Err_go DoCmd.OpenForm "F_見積一覧", acNormal DoCmd.Close acForm, "F_メイン画面" Exit_go: Exit Sub Err_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
次に「F_顧客リスト」フォームの[メイン画面へ]コマンドボタンにもクリック時のイベントに以下のようなプロシージャを作成します。

Private Sub メイン画面へ_Click() On Error GoTo Err_go DoCmd.OpenForm "F_メイン画面", acNormal DoCmd.Close acForm, "F_顧客リスト" Exit_go: Exit Sub Err_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
次は、「F_見積一覧」フォームの[メイン画面へ」コマンドボタンにもクリック時のイベントに以下のようなプロシージャを作成します。

Private Sub メイン画面へ_Click() On Error GoTo Err_go DoCmd.OpenForm "F_メイン画面", acNormal DoCmd.Close acForm, "F_見積一覧" Exit_go: Exit Sub Err_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
フォームを開いて、閉じるという動作を見てもわかるように、記述の違いは開くオブジェクト名と、閉じるオブジェクト名だけです。その他の記述はすべて同じなので、1つ作成してからそれをコピーしてオブジェクト名を変更するだけの作業となります。マクロであれば、これを一つ一つ指定していくことになるので、同じ仕組みであればVBAの方が、作成作業が簡単であることを分かります。
Accessを終了させる
「F_メイン画面」フォームには[終了]コマンドボタンが配置されています。これをクリックすると、現在開いているデータベースを閉じて、さらにAccessも終了させるようにします。つまり、作業が終わると結局はAccessも閉じることになるので、その途中の無駄を省いて、データベースを閉じると同時にAccessも終了させます。
Accessを終了させるにはQuitメソッドを使用します。
◆ Quitメソッド
【書式】
Application.Quid [終了方法]
Docmd.Quit [終了方法]
- 終了方法:終了時の動作方法を指定。ダイアログボックスを表示させる(acQuitPrompt)、変更内容をすべて保存(acQuitSaveAll)、変更内容は保存しない(acQuitSaveNone)の中から指定します。既定値は、変更内容をすべて保存となります。
「F_メイン画面」フォームの[終了]コマンドボタンのクリック時のイベントに以下のようなプロシージャを作成します。
Private Sub 終了_Click() Dim myAction As Integer On Error GoTo Err_go myAction = MsgBox("終了してもよろしいですか?", _ vbOKCancel + vbInformation, "終了確認") If myAction = vbOK Then DoCmd.Quit acQuitSaveAll Else Exit Sub End If Exit_go: Exit Sub Err_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
[終了]コマンドボタンを誤ってクリックしてしまう場合も想定して、クリック時に“まず終了して良いかどうか”のメッセージを表示させ、終了の確認をして[OK]ボタンで終了するように作成します。
