MicrosoftOfficeシリーズで利用できるデータベース管理ソフトウェア、Access。Excelなど他のソフトと比べて情報が少ないため、わからないことがあっても調べるのに苦戦し、結局同じ機能ばかり使っていませんか?このコラムでは、Accessを実務で使うときに「知っているとちょっと便利なコツ」について、Accessに関する著書を多数お持ちの今村ゆうこさんが解説します。痒い所に手が届く、そんなコラムを目指して更新しますので、あなたのAccess力アップにお役立てください。
アプリは「イベント」を利用して動いている
Accessはデータベース管理ソフトウェアですが、データの管理のみならず、自由にUIを設計して独自のアプリケーションを作成することができます。UIの土台を「フォーム」、土台の上に設置する部品を「コントロール」と呼びますが、これらに対してユーザーが行った操作(イベント)で、指定のアクションが起動するようにしておくのです。
直感的に理解しやすいのが「ボタン」コントロールです。おそらく何も説明されていなくても、「クリックしたら何かが起こるんだろうな」という気持ちになりますよね。この心理を利用して、マクロやVBAで作ったアクションを「ボタン」コントロールの「クリック時」イベントに対して設定すると、ユーザーも操作に迷いにくくなります。
しかし、「ボタン」コントロールにはほかにもたくさんのイベントが存在しています。たとえば、「ダブルクリック時」「フォーカス取得時」「フォーカス離脱時」などを利用してアクションを起こすこともできるのです。
「ボタン」に関して言えばユーザーが一番使いやすいのは「クリック時」で間違いないでしょうが、Accessのコントロールにはどんな種類があって、それらのコントロールのイベントにはどんなものがあるのか、どこから参照できるのかということを知っておくと、より便利なアプリケーション開発へのヒントにつながるかもしれません。
今回は、そんなイベントの探し方や使用例などを紹介します。
セクションとコントロール
下の図は、新規Accessファイルにて「作成」→「フォームデザイン」で新規フォームを作成したところです。
フォームはデフォルトでは「詳細」しか表示されていませんが、右クリック→「ページ ヘッダー/フッター」「フォーム ヘッダー/フッター」をクリックすると、以下のように隠れていたセクション(領域)が表示されます。
フォームではあまり利用されないかもしれませんが、セクションはレポートでは重要な部分で、印刷時に複数ページに渡ったときに以下のような特徴があります。
:最初のページのヘッダーだけに印刷される
:すべてのページのヘッダーに印刷される
:すべてのページのフッターに印刷される
:最後のページのフッターだけに印刷される
コントロールは、「デザイン」タブ内から選ぶことができます。コントロールを選択し、任意のセクション内でクリックまたはドラッグ(範囲指定)して配置します。
保有イベントの探し方
対象オブジェクトを選択した状態でプロパティウィンドウ(表示されていない場合は「デザイン」→「プロパティーシート」)の「イベント」タブを見ると、そのオブジェクトに用意されているイベント一覧が確認できます。テキストボックスにもこんなにたくさんのイベントがあるのがわかりますね。
イベントを利用できるオブジェクトはコントロールだけではなく、セクションやフォームそのもの(セクション外のグレー部分をクリック)にもたくさん用意されています。
特定のイベントからなんらかのアクションを起動させたい場合は、イベントの「…」をクリックすると「ビルダーの選択」ウィンドウが開きます。
「ビルダーの選択」ウィンドウで「マクロビルダー」を選択すると、マクロツールでアクションを登録できます。
「ビルダーの選択」ウィンドウで「コードビルダー」を選択するとVBE(Visual Basic Editor)が開き、該当のイベントプロシージャが挿入されるので、ここにコードを書きます。
動作するのは「フォームビュー」操作時です。例としてテキストボックスの「変更時」イベントを設定したので、テキストボックスの内容を変更すると登録したマクロ/VBAが起動します。
チェックボックスで削除フラグを含める/含めない一覧に切り替える例
それでは応用例を見てみましょう。ここからは、のちほどSQLを書くときにわかりやすいように、テーブル名には「T_」、フィールド名には「f_」、コントロール名にはその種類の略称を頭文字に付けるルールとします。
図のようなテーブルがあるとします。
フォームに、コンボボックスとチェックボックス、それぞれに付随するラベルを設置します。コンボボックスは以下のように設定して2列表示できるようにします。幅はフィールドの値が適切に表示される大きさを任意で設定します。
チェックボックスは規定値をFalseにしておきます。
ここまでが下準備です。
フォームの「読み込み時」イベントを設定します。コードビルダーを選択してイベントプロシージャを作成しましょう。
作成された「Form_Load」プロシージャへ以下のように書くことで、「フォームが開いた時」に「削除フラグがFalseの商品リスト」をコンボボックスのソースにします。
Me.cmb_商品.RowSource = "SELECT f_商品ID, f_商品名 FROM T_商品マスター
WHERE f_削除フラグ = False;"
End Sub
続いてチェックボックスの「クリック時」イベントでコードビルダーを選択し、イベントプロシージャを作成します。
作成された「chk_削除フラグ_Click」プロシージャへは以下のように書き、チェックボックスの値でコンボボックスのソースを「すべての商品リスト」か「削除フラグがFalseの商品リスト」に切り替えます。
If Me.chk_削除フラグ.Value = True Then
Me.cmb_商品.RowSource = "SELECT f_商品ID, f_商品名 FROM T_商品マスター;"
Else
Me.cmb_商品.RowSource = "SELECT f_商品ID, f_商品名 FROM T_商品マスター
WHERE f_削除フラグ = False;"
End If
End Sub
フォームビューで動作確認をしてみると、「フォームが開いた時」は「削除フラグがFalseの商品リスト」になっています。
チェックボックスをクリックして値を切り替えると、リストが変化します。
ほかにも、コンボボックスの「変更時」イベントで別のコンボボックスのリストを絞り込んだり、テキストボックスの「フォーカス喪失時」イベントで入力値をチェックしたりなど、イベントのことを知っていると「このタイミングでこんな動きをしたらどうだろう」というアイデアが思いつきやすくなりますよね。
コントロールについて、新しい活用イメージがわきましたか?コラムを読んだら、一度Accessに触れながら復習するのもおすすめです。次回はレイアウトでつまずきやすいポイントを解説します。レポートやフォームを作成するときに位置や大きさがバラバラになってしまう方、必見です。