派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

第1話「イベント」を使いこなそう 【連載】実務で使えるAccessのコツ

f:id:itstaffing:20210511130431j:plain

MicrosoftOfficeシリーズで利用できるデータベース管理ソフトウェア、Access。Excelなど他のソフトと比べて情報が少ないため、わからないことがあっても調べるのに苦戦し、結局同じ機能ばかり使っていませんか?このコラムでは、Accessを実務で使うときに「知っているとちょっと便利なコツ」について、Accessに関する著書を多数お持ちの今村ゆうこさんが解説します。痒い所に手が届く、そんなコラムを目指して更新しますので、あなたのAccess力アップにお役立てください。

【筆者】今村 ゆうこさん
【筆者】今村 ゆうこさん
地方の非IT系企業に勤務し、業務アプリケーション開発を行うプログラマー。著書のイラストや図解も手掛けている。大学卒業後出身地へUターン就職し、2度の産休/育休を経て現在は小学生と保育園児の2人のこどもを抱えるワーキングマザー。主にVBAを使ってデータベースの情報を加工/展開するアプリを開発するほか、WordPressを使った個人ブログ(https://ateitexe.com/)で技術情報を発信している。著書に『Accessデータベース 本格作成入門』『Excel & Access連携 実践ガイド』(技術評論社)など。

  アプリは「イベント」を利用して動いている    

Accessはデータベース管理ソフトウェアですが、データの管理のみならず、自由にUIを設計して独自のアプリケーションを作成することができます。UIの土台を「フォーム」、土台の上に設置する部品を「コントロール」と呼びますが、これらに対してユーザーが行った操作(イベント)で、指定のアクションが起動するようにしておくのです。

直感的に理解しやすいのが「ボタン」コントロールです。おそらく何も説明されていなくても、「クリックしたら何かが起こるんだろうな」という気持ちになりますよね。この心理を利用して、マクロやVBAで作ったアクションを「ボタン」コントロールの「クリック時」イベントに対して設定すると、ユーザーも操作に迷いにくくなります。

f:id:itstaffing:20210511130433j:plain

しかし、「ボタン」コントロールにはほかにもたくさんのイベントが存在しています。たとえば、「ダブルクリック時」「フォーカス取得時」「フォーカス離脱時」などを利用してアクションを起こすこともできるのです。

「ボタン」に関して言えばユーザーが一番使いやすいのは「クリック時」で間違いないでしょうが、Accessのコントロールにはどんな種類があって、それらのコントロールのイベントにはどんなものがあるのか、どこから参照できるのかということを知っておくと、より便利なアプリケーション開発へのヒントにつながるかもしれません。

今回は、そんなイベントの探し方や使用例などを紹介します。

  セクションとコントロール    

下の図は、新規Accessファイルにて「作成」→「フォームデザイン」で新規フォームを作成したところです。

f:id:itstaffing:20210511130436j:plain

フォームはデフォルトでは「詳細」しか表示されていませんが、右クリック→「ページ ヘッダー/フッター」「フォーム ヘッダー/フッター」をクリックすると、以下のように隠れていたセクション(領域)が表示されます。

f:id:itstaffing:20210511130439j:plain

フォームではあまり利用されないかもしれませんが、セクションはレポートでは重要な部分で、印刷時に複数ページに渡ったときに以下のような特徴があります。

フォーム/レポートヘッダー
:最初のページのヘッダーだけに印刷される
ページヘッダー
:すべてのページのヘッダーに印刷される
ページフッター
:すべてのページのフッターに印刷される
フォーム/レポートフッター
:最後のページのフッターだけに印刷される
 
したがって、(特にレポートの場合ですが)どのセクションにコントロールを配置するかによって使われ方が異なる場合があるので、覚えておくとよいでしょう。

コントロールは、「デザイン」タブ内から選ぶことができます。コントロールを選択し、任意のセクション内でクリックまたはドラッグ(範囲指定)して配置します。
 
f:id:itstaffing:20210511130441j:plain

  保有イベントの探し方    

対象オブジェクトを選択した状態でプロパティウィンドウ(表示されていない場合は「デザイン」→「プロパティーシート」)の「イベント」タブを見ると、そのオブジェクトに用意されているイベント一覧が確認できます。テキストボックスにもこんなにたくさんのイベントがあるのがわかりますね。

f:id:itstaffing:20210511130444j:plain

イベントを利用できるオブジェクトはコントロールだけではなく、セクションやフォームそのもの(セクション外のグレー部分をクリック)にもたくさん用意されています。

f:id:itstaffing:20210511130447j:plain

特定のイベントからなんらかのアクションを起動させたい場合は、イベントの「…」をクリックすると「ビルダーの選択」ウィンドウが開きます。

f:id:itstaffing:20210511130450j:plain

「ビルダーの選択」ウィンドウで「マクロビルダー」を選択すると、マクロツールでアクションを登録できます。

f:id:itstaffing:20210511130453j:plain

「ビルダーの選択」ウィンドウで「コードビルダー」を選択するとVBE(Visual Basic Editor)が開き、該当のイベントプロシージャが挿入されるので、ここにコードを書きます。

f:id:itstaffing:20210511130455j:plain

動作するのは「フォームビュー」操作時です。例としてテキストボックスの「変更時」イベントを設定したので、テキストボックスの内容を変更すると登録したマクロ/VBAが起動します。

f:id:itstaffing:20210511130459j:plain

  チェックボックスで削除フラグを含める/含めない一覧に切り替える例    

それでは応用例を見てみましょう。ここからは、のちほどSQLを書くときにわかりやすいように、テーブル名には「T_」、フィールド名には「f_」、コントロール名にはその種類の略称を頭文字に付けるルールとします。

図のようなテーブルがあるとします。

f:id:itstaffing:20210511130502j:plain

フォームに、コンボボックスとチェックボックス、それぞれに付随するラベルを設置します。コンボボックスは以下のように設定して2列表示できるようにします。幅はフィールドの値が適切に表示される大きさを任意で設定します。

f:id:itstaffing:20210511130506j:plain

チェックボックスは規定値をFalseにしておきます。

f:id:itstaffing:20210511130508j:plain

ここまでが下準備です。

フォームの「読み込み時」イベントを設定します。コードビルダーを選択してイベントプロシージャを作成しましょう。

f:id:itstaffing:20210511130511j:plain

作成された「Form_Load」プロシージャへ以下のように書くことで、「フォームが開いた時」に「削除フラグがFalseの商品リスト」をコンボボックスのソースにします。

Private Sub Form_Load()
 Me.cmb_商品.RowSource = "SELECT f_商品ID, f_商品名 FROM T_商品マスター
WHERE f_削除フラグ = False;"
End Sub

続いてチェックボックスの「クリック時」イベントでコードビルダーを選択し、イベントプロシージャを作成します。

f:id:itstaffing:20210511130513j:plain

作成された「chk_削除フラグ_Click」プロシージャへは以下のように書き、チェックボックスの値でコンボボックスのソースを「すべての商品リスト」か「削除フラグがFalseの商品リスト」に切り替えます。

Private Sub chk_削除フラグ_Click()
 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の商品リスト」になっています。

f:id:itstaffing:20210511130516j:plain

チェックボックスをクリックして値を切り替えると、リストが変化します。

f:id:itstaffing:20210511130519j:plain

ほかにも、コンボボックスの「変更時」イベントで別のコンボボックスのリストを絞り込んだり、テキストボックスの「フォーカス喪失時」イベントで入力値をチェックしたりなど、イベントのことを知っていると「このタイミングでこんな動きをしたらどうだろう」というアイデアが思いつきやすくなりますよね。

コントロールについて、新しい活用イメージがわきましたか?コラムを読んだら、一度Accessに触れながら復習するのもおすすめです。次回はレイアウトでつまずきやすいポイントを解説します。レポートやフォームを作成するときに位置や大きさがバラバラになってしまう方、必見です。