しがないOLのはじめての「Microsoft Access」 ~コントロール編~

こんにちは。クニ吉です。
有川浩さんの小説にハマりまくりでとうとうハードカバーに手を出してしまいました。
毎日カバンが重いです。。「県庁おもてなし課」を読み終わり、今は「キケン」を読んでいます。
「県庁おもてなし課」は今年映画公開予定なので、ぜひ観に行きたいですね。

早速本題に入りましょう。
前回はフォームのデザイン変更ということで、色変更や配置を行いました。
今回は 「コントロール」についてご紹介します。

コントロールとは?

フォームに配置するラベルやテキストボックス、ボタンなどの部品のことを指します。
コントロールとは「管理する」、「制御する」などの意味がありますが、その名の通りアプリケーションを制御するためにフォーム上に配置するオブジェクトのことです。

コントロールの種類

コントロールは様々な種類があります。
よく使うものからめったに使わないものまでいろいろありますが、今回はざっとご紹介します。
※今回、Accessに標準で用意されていない外部コントロールについては除外します。

【その前に:コントロールの命名規則について】

それぞれのコントロールの名前付けはとても重要です。
コードを書く時に「 テキストボックス1」などでは、どういったデータを扱うコントロールなのかがわかりません。
そんな可読性の低いコードはデバッグも大変です。私も当初きちんと名前を付けていなかったので大変でした。
私はハンガリー表記法と呼ばれる命名ルールで名前付けを行っています。(賛否両論あるようですが、私は作業しやすいので)
ハンガリー表記法で書く名前は「Prefix (接頭辞)+名前」 となります。

例えば対象のコントロールが会社名を扱うテキストボックスであれば、「textbox」を表す「txt」をPrefix (接頭辞)として「txtCompany」というコントロール名にします。 「txt_Company」でもいいですし、その辺は任意で。
但し、大文字小文字などきちんとルールを決めたうえで名前付けをしましょう。 
今回は一部コントロールのPrefixも一緒にご紹介していきますが、Prefixは主にMicrosoftのサポートページを参照しています。
情報: オブジェクト ハンガリー表記法の名前付け規則 VB
ここに書かれているものじゃないとだめということはないので、分かりやすい名前をつけてしまってOKです。
但し、しっかり決めておくこと。大事なのは可読性や保守性を高めることです。

◎テキストボックス

文字入力するためのコントロール

使用頻度が最も高いコントロールで、文字を入力できるようにします。
Prefix :txt

◎ラベル

名前など文字表示するためのコントロール

上図テキストボックスの左側に配置している「テキストボックス」という文字はこのラベルを使用しています。
テキストボックスやリストボックスなど特定のコントロール作成時には自動で生成されます。 
Prefix :lbl(制御対象ではないので、コントロール名はほとんど変更してません。。)

◎コマンドボタン

機能を実行するためのコントロール

機能を割り当てられたボタン。クリックすることで割り当てられた機能を実行します。
例えば、「フォームを開く」、「データを更新する」などをユーザーが簡単に実行することができるようになります。
ボタンには埋め込みマクロや任意の処理を設定する必要があり、これらはプロパティ設定のイベントで設定することができます。(本シリーズの「デザイン変更編」で軽く触れていますのでご参照ください)
また、ボタンのポイント時・クリック時の色を変更できます。ユーザー自身が何を押そうとしているのか視覚的に理解することが可能になります。
明快であること」はユーザーインターフェースの最も重要な要素ですので、ユーザーが操作を間違わないよう配慮する必要があります。
Prefix :cmd

◎ハイパーリンク

フォームにリンクを作成するためのコントロール

ハイパーリンク

Webページ、画像、電子メールアドレスやプログラムへのリンクを作成することができます。
図の「住所録Sample.xlsx」をクリックすると、指定した住所録ファイル(Excel)が開きます。
Webページであれば、ブラウザが立ち上がり指定したページを表示します。
Prefix :lnk(自作)

◎Webブラウザーコントロール

フォームにWebページを表示するためのコントロール

Webブラウザーコントロール

フォームにWebページを表示することができます。
ハイパーリンクはクリックしてブラウザが立ち上がるのに対し、Webブラウザコントロールは指定したWebページがそのままフォーム上に表示されます。

◎タブコントロール

多数のコントロールをページ毎に分類し、単一のセットとして表すためのコントロール

ひとつのフォームに数多くのコントロールが存在する場合、存在するコントロールのグループ分けをしてタブコントロールの中に配置することができます。
例えば会社名や住所などの会社情報と、所属する担当者やメールアドレスなどの担当者情報とで分類できる場合、ページ1に会社情報、ページ2に担当者情報に関するコントロールを配置することで、整理されて操作しやすくなります。
Prefix :tab

◎ナビゲーションのコントロール

複数のフォームやテーブルなどを1つのフォームで表示するためのコントロール

ナビゲーションコントロール

タブコントロールのように、1つのフォームに複数のフォームやテーブルを配置することができます。
例えば、企業情報登録フォームと見積書フォームを配置し、タブで切り替えて入力や確認が可能になります。
各フォームをいちいち展開する必要がないため、作業を行いやすくなります。
Prefix :navとか?(自作)

◎オプショングループ

チェックボックスやオプションボタンをグループ化するためのコントロール

オプショングループ

複数のチェックボックスやオプションボタン、トグルボタンとグループフレームで構成されており、フレーム内に配置したボタン群をグループ化し、ひとつのグループとして値を返すことができます。
例えば、オプションボタン1を選択した場合、「1」という値を返します。
Prefix :fra

◎オプションボタン

複数の選択肢からひとつを選択するためのコントロール

オプションボタン

通常オプショングループ内に配置し、複数のオプションボタンを作成します。
オプショングループ内に配置されたオプションボタン群からは1つしか選択することができないため、複数回答(チェック)をさせない場合に使用されます。
オプショングループの説明にあるように、選択したボタンによって返り値が異なります。
例えば、オプションボタン2を選択した場合「2」を返します。
一般的には「ラジオボタン」と同じ意味で用いられます。

◎チェックボックス

Yes/No型など二者択一の項目を入力するためのコントロール

チェックボックス

True(-1)またはFalse(0)を返すコントロール。アンケートに使用されているのをよく見ますね。
例えば技術者情報があるとして、各技術者の対応可能技術にチェックを入れられるようにしておけば、案件で必要な技術者を簡単に抽出し、要員を検討することができます。
Prefix :chk

◎トグルボタン

二者択一または項目のオン/オフの選択をするためのコントロール

トグルボタン

クリックすることでオン/オフを切り替えられるボタンで、スイッチのようなイメージ。
コマンドボタンとは違い、ボタンを押すとその状態を保持します。
通常くぼんでる場合がオンで、くぼんでいない場合がオフとなり、チェックボックスと同じようにTrue(-1)またはFalse(0)が返り値になります。
Prefix :tgr

◎コンボボックス

項目の選択や入力するためのコントロール

コンボボックス

テキストボックスとリストボックスを組み合わせたようなもので、データの入力や既存データから値を選択することができます。
例えば企業情報と見積書情報の2つのフォームがあった時、見積書フォームに企業を選択するコンボボックスを配置すると企業と見積書が関連付けられます。
管理部を選択すると管理部に所属しているメンバーの名前のみが表示されるといったコンボボックスの絞り込みを行うこともできます。

コンボボックスの絞り込み

Prefix :cbo

◎リストボックス

値または選択肢リストを表示するためのコントロール

リストボックス

設定した値や既存データから値を選択することができます。
プルダウンしないコンボボックスという感じですが、コンボボックスと異なり直接値を入力することはできません。
非連結のリストボックスから郵送用の宛名ラベルを作れるようにするなど自由に使ってます。
Prefix :lst

◎グラフ

テーブルやクエリのデータをグラフ化するためのコントロール 

グラフ

テーブルやクエリのデータを利用して、フォーム上にグラフを作成することができます。
縦棒グラフの他、横棒グラフ、面グラフ、折れ線グラフ、散布図、円グラフ、バブルチャート、ドーナツグラフなどがあります。
企業別の売上高や売上構成比など視覚的に表現することができます。
Prefix :gra

◎四角形

図形・・

四角形

説明するほどのことでもないですが、四角形です。
同じカテゴリーのオブジェクトをこの四角形の中に配置したり、主にフォームのデザインとして使用しています。

◎非連結オブジェクトフレーム

非連結オブジェクトを配置するためのコントロール

非連結オブジェクトフレーム

テーブルに格納されていない(格納しない)ピクチャやグラフなどの非連結オブジェクトをフォームやレポートに配置するためのコントロール。
非連結のため、挿入したオブジェクトはテーブルには格納されず、どのレコードも同じ内容が表示されることになります。
フレーム内のオブジェクトはフォームやレポートから直接編集することができ、図は新規のExcelワークシートを選択し、フォーム上で編集したもの。

◎連結オブジェクトフレーム

連結オブジェクトを配置するためのコントロール

連結オブジェクトフレーム

テーブルに格納されている(格納する)ピクチャ、グラフなどの連結オブジェクトをフォームやレポート上に配置するためのコントロール。
連結しているため、挿入したオブジェクトはテーブルに格納され、レコード毎に異なる内容が表示されます。
例えば商品テーブルに商品画像を格納し、レコード毎に異なる商品画像を表示することができます。
非連結オブジェクトフレーム同様、フレーム内のオブジェクトはフォームやレポートから直接編集することができます。

◎イメージ

ピクチャをフォームやレポート上に配置するためのコントロール

イメージ

写真や画像などを配置するために使用し、非連結オブジェクトとなります。
非連結ピクチャを表示するには、このイメージコントロールと非連結オブジェクトフレームのいずれかを使用します。
両者の違いは、「フォーム上で編集可能かどうか」と「表示速度」です。
イメージコントロールはフォーム上で編集することができませんが、非連結オブジェクトフレームに比べて表示が速いことが特徴です。
Prefix :img◎添付ファイル

◎添付ファイル

複数のファイルをまとめてテーブルに格納するためのコントロール

添付ファイル

添付ファイルコントロールを使うと、ExcelやWord、PowerPoint、イメージなどの様々な種類のファイルをひとつのフィールドに格納することができます。
格納されたファイルは、それぞれの親プログラムで開くことができます。(格納されたファイルがExcelワークブックならExcelが起動する)

◎サブフォーム/サブレポート

フォームやレポートに他のフォームまたはレポートを配置するコントロール

サブフォーム

サブフォームコントロールは、データベース内の別のオブジェクト(フォームやテーブル、クエリ)を表示します。
1対多のリレーションシップを持つテーブルやクエリを表示する場合に特に便利です。
例えば、部署情報を表示するフォームに、その部署に所属する社員情報を表示するサブフォームを配置することができます。

コントロールの作り方

では、ご紹介したオブジェクトをフォーム上に配置する方法です。
デザインビューでフォームを開き、デザインタブをクリックすると、下にコントロールと書かれている様々なアイコンがあります。

コントロール作成

この中から作成したいコントロールをクリックします。
アイコンにカーソルを持っていくとコントロール名が表示されます。
コントロール一覧

フォーム上でコントロールのサイズを決定するとポップアップでコントロール作成ウィンドウが表示されます。
それぞれのコントロールによって内容が異なりますので、画面の内容に沿って設定をしてください。

【連結オブジェクトについて】

作成したコントロールは、作成時点では非連結の状態となっており、データをテーブルに保存することができません。
そのため、コントロールに入力されたデータをテーブルに保存する場合には、コントロールと保存先(フィールド)を繋げる必要があります。
まずコントロールをアクティブにし、プロパティシートを開きます。
保存先設定

データタブ内「コントロールソース」の▼を展開してみると、フォームの元となっているテーブルのフィールド名が表示されています。

保存先設定2

該当する保存先をクリックすると、入力されたデータは指定したフィールドに保存されるようになります。
保存先設定3

コントロールソースに何も表示されない場合

保存先設定_空白

上記の手順でコントロールソースに何も表示されない場合は、フォーム自体がテーブルと紐づいていません。
空白のフォーム」からフォームを作成するとこのようなことがあります。
フォーム自体をテーブルと繋げるには、プロパティシートのコントロール名から「フォーム」を選択します。(プロパティシートについては、本シリーズの「フォームのデザイン変更編」で触れていますのでご参照ください。)
データタブ内に「レコードソース」というものがありますので、コントロールソースと同じように▼をクリックすると、データベース内に存在するテーブルが表示されます。

レコードソース設定

ここで該当するテーブルを選択するとフォームとテーブルが紐づき、設定したいコントロールのコントロールソースにはテーブルに存在するフィールド名が表示されるようになります。

コントロールに関してはこんなところでしょうか。
次回は、今回ご紹介したコントロールを使ってフォームをカスタマイズしたいと思います。
ではではm(_ _)m