Accessを使ったシステム開発において、そのフォームデザインは、使いやすさと視覚的な一貫性の確保に欠かせない要素です。
また開発の生産性やシステムの保守的な観点からシステムを構成する複数のフォーム上の各コントロールのプロパティが個別に設定されるのは好ましいことではありません。
この記事では、AccessフォームのコントロールプロパティをVBAで一括設定し、統一感のある、保守性に優れた魅力的なフォームを手軽に構築する特別なデザインテクニックをご紹介します。
あなたもプロのように統一感があり、使いやすさと視覚的な一貫性を両立したAccessフォームの特別なデザインテクニックを手に入れませんか。
はじめに
フォームデザインの重要性
Access では非常に簡単にフォーム開発が出来てしまうので、ややもすると一貫性のないフォームデザインを量産してしまう可能性があります。
しかし、以下のような観点、あるいは開発生産性/保守性向上の観点からこのフォームデザインが重要であることは皆さんもご存じのとおりです。
項番 | 観点 | 詳細 |
---|---|---|
1 | ユーザーエクスペリエンスの向上 |
良いフォームデザインは、ユーザーがアプリケーションを使う際の体験を向上させます。 分かりやすいレイアウト、一貫性のある色使い、わかりやすいコントロール配置などが、ユーザーがアプリケーションをよりスムーズに操作できるようにします。 |
2 | 信頼性とプロフェッショナリズムの向上 |
フォームデザインは、アプリケーションやデータベースの信頼性とプロフェッショナリズムを示す重要な要素です。 整然としたデザインは、ユーザーに対して信頼性の高い印象を与え、プロフェッショナルなアプローチを示す手段となります。 |
3 | 誤操作の軽減 |
適切なデザインは、誤操作やデータ入力ミスを最小限に抑えるのに役立ちます。 例えば、コントロールの大きさや間隔を適切に設定することで、ユーザーが誤って間違ったボタンをクリックしたり、誤った情報を入力したりするリスクを軽減できます。 |
4 | 効率性の向上 |
適切なフォームデザインは、作業の効率性を高める助けとなります。 必要な情報が視覚的に整理されている場合、ユーザーは素早く必要なデータを見つけることができ、業務の迅速な進行が可能となります。 |
5 | ユーザーサポートの軽減 |
良いフォームデザインは、ユーザーサポートの必要性を減少させることがあります。 分かりやすいラベル、ヒント、エラーメッセージなどが適切に配置されていれば、ユーザーは操作方法を理解しやすくなり、サポートへの依存が減ります。 |
しかし、そうは言っても具体的にはどうすればいいのでしょう。
1992年初版の洋書ですが、しらかば堂が以前読んで(正確に言うと眺めて)
最初から世界を目指す企業というのは ここまで考慮するのか…と感動した
Macintosh human interface guideline
のPDFが現在無料でダウンロードできます。
この書籍にはフォームのようなユーザーインターフェース開発において考慮すべき基本原則が多数記述されていますので。興味のある方はぜひご覧ください。
プロパティシートを使ったプロパティ設定の方法
フォーム作成を行う場合、通常はフォーム、あるいはそのフォーム内のコントロールのプロパティ値はそのデザインビュー中のプロパティシートでそのプロパティ値を1つずつ設定します。
例えば以下の例は「Main」というフォーム内に配置された「テキスト1」というコントロールを選択後に画面右側に現れるプロパティシートです。
自分も含めたAccessの初学者が参照する学習書には概ねこのプロパティシート上でプロパティの値を設定することが基本とされています。
しかしこの方法では、フォームの数だけ、あるいはコントロールの数だけプロパティシート上の無数のプロパティを設定しなければなりません。
これ考えただけで気が遠くなります…。
VBAを使ったプロパティ設定方法
ところでAccess やVBAの学習が進むと、実はVBAでこれらのプロパティを設定できることに気が付きます。
以下は先ほどの「Main」フォームに紐づいたVBAのForm_Mainモジュール内にForm_Openイベント発生時に起動されるForm_Open プロシージャ内のコーディング例ですが
左側に表示されたVBE内のプロパティウインドウに表示されたプロパティの名前を確認しながら、
つまり
Private Sub Form_Open(Cancel As Integer)
Me.テキスト1.Height = 397 ' 0.7cm
Me.テキスト1.FontName = "MS Pゴシック"
Me.テキスト1.FontSize = 11
Me.テキスト1.TextAlign = 1 '左揃え
Me.テキスト1.TopMargin = 45
Me.テキスト1.LeftMargin = 57
End Sub
のようなコードを Form_Open プロシージャ中に記述すると、この「Main」フォームが開かれるときイベントプロシージャの仕組みで、これらのプロパティ値が設定可能というわけです。
この Me はこのプロシージャが呼び出される契機となったフォーム自身、つまりここでは「Main」フォームのことを指します。つまり
Me.テキスト1.Height = 397 ' 0.7cm
は
Forms("Main").テキスト1.Height = 397 ' 0.7cm
と同じ意味で Main フォーム上の テキスト1 というコントロールの高さを
397twip = 0.7cm に設定するという意味です。
twip(typographical)は長さの単位の国際的なシステム (SI) の基本単位です。
- 1cm = 569.07163929053 twip
- 1 twip = 1.757248E-3 cm
Form_Openイベントは、Accessのウィドウイベントの1つで、以下のようにフォームが開き最初のレコードが表示される前、あるいはレポートがプレビュー、印刷される前に発生し、このイベントに紐づいたForm_Open というイベントプロシージャが起動されます。
項番 | イベント名 | 発生タイミング |
---|---|---|
1 | Form_Openイベント | フォームが開き最初のレコードが表示される前、あるいはレポートがプレビュー、印刷される前に発生します |
2 | Loadイベント | フォームあるいはレポートが開きレコードが表示されるときに発生します |
3 | Activateイベント | フォームあるいはレポートがフォーカスを受け、アクティブになるときに発生します |
なおこれらのウィドウイベントは Open → Load → Activate の順に発生します。
でもこの方法ではフォーム内のコントロールのプロパティシートに手書きで設定しているのとあまり変わりません。
つまりフォーム毎にこういったプロパティ設定用のVBAステートメントをいちいち記述しないといけないので手間暇があまり変わりません。
しかもフォームのデザインモードで各コントロールのプロパティは日本語表記なのに、VBE側プロパティ表記では英語表記なところも、残念なところです。
VBAを使った一括プロパティ設定の考え方
ではどうしたらよいでしょう。
実はこれらのプロパティ設定を各フォームのモジュール毎ではなく、標準モジュールにこれらのプロパティを共通化記述することで、非常にシンプルにこれらが解決できます。
その要点は以下2点です。
- フォーム作成にかかわる共通定数、共通関数、共通プロパティ設定を行う共通プロシージャをVBAの標準モジュールに定義する
- 各フォームのフォームモジュール内にForm_Openイベント発生時に起動されるForm_Open プロシージャの中で先ほど標準モジュール内に定義した共通プロパティ設定を行う共通プロシージャを呼び出し、フォーム、あるいはそれぞれのコントロールのプロパティを設定する
ただ先ほどちらっとご見せしたように、プロパティシート上のコントロールのプロパティは無数にありますし、プロパティの日本語、英語問題もあり、なかなか整理するのは大変です。
見栄えを整える一般的なプロパティとは
そこでまず、見栄えを整えるための一般的なプロパティとは何なのかについてまず整理しましょう。
具体的には株式会社インフォース 前野好太郎著の「中小企業向けAccess開発実践ノウハウ」の情報を筆頭に、他の情報ソースも参照しながら必要と思われる一般的なプロパティを抜粋し、出来上がったプロパティリストは以下の通りです。
項番 | プロパティ | 推奨設定 | |
---|---|---|---|
1 | 配色 | 基本は2色とすべき | |
2 | フォント | フォントの種類 | 機種依存性の少ないフォントを選択 |
プロポーショナルフォント: メイリオ(英語)、MS Pゴシック、MS P明朝 |
|||
等幅フォント: メイリオ(漢字)、MS ゴシック、MS 明朝 |
|||
文字装飾 | 使用しない | ||
フォントの大きさ | ラベル、テキストボックス、コマンドボタン含め統一する | ||
3 | ラベル テキストボックス |
サイズと余白 | 入力できる文字数の最大数を考慮して統一すべき |
立体表示 | 使用しない | ||
背景スタイル | 以下から選択 | ||
「通常」(背景色を表示) | |||
「透明」(背景色を透過) | |||
境界線 | 境界線スタイル=実線 | ||
境界線色=透明 | |||
境界線幅=細線 | |||
オブジェクトの背景色 | 白:通常入力時 | ||
黄:入力された値を元にデータ表示するとき | |||
赤:マスタで設定された値を元にしたプルダウン入力 | |||
オブジェクトの配置 | 複数オブジェクトを配置する際には幅をそろえる。また5:8(1:1.618)という黄金比を活用する。 |
前野好太郎著の「中小企業向けAccess開発実践ノウハウ」は、以下になりますので、必要に応じてお求め下さい。
対象プロパティの選定、VBA化に向けた読み替え、推奨設定値の選定
次に先ほどのリストから具体的な対象プロパティを選定し、VBAによる具体的な実装に向け、デザインビューとVBE環境間でのプロパティ名の読み替えを行い、さらに推奨設定値についてもまとめておく必要があります。
そしてデザインビューとVBE間でcmからtwipへの長さ単位の変換や、デザインビュー側で既定値として意味表現している設定値をVBA側では実際の設定値に翻訳する作業も必要です。
以下は先ほどの「中小企業向けAccess開発実践ノウハウ」から抜粋した見栄えを整える一般的なプロパティをベースに、しらかば堂が実際に動作確認しながら抜粋したプロパティ、推奨設定値の一覧になります。
フォーム
まず見栄えの良いフォーム作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | レコードセレクタ | はい | RecordSelectors | False |
Access フォームの「レコードセレクタ」は、フォーム内の各レコードを識別し、選択、表示、編集するための▶アイコンを伴った下の図で赤枠で囲まれたエリアを指します。
ヘッダーセクション
次に見栄えの良いヘッダーセクション作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 可視 | はい | Visible | True | システム全体の推奨値なし 個別画面で必要に応じて指定 |
2 | 高さ | 1.2cm | Height | 680 twip | |
3 | 背景色 | テキスト 2, 明るめ 80% | BackColor | 15064278 | #E5DCD6 |
ラベル
また見栄えの良いヘッダーセクション中のラベル作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 上位置 | 0.2cm | Top | 120 twip | |
2 | 左位置 | 0.6cm | Left | 360 twip | |
3 | 幅 | cm | twip | システム全体の推奨値なし 個別画面で必要に応じて指定 |
|
4 | 高さ | 0.7cm | Height | 397 twip | |
5 | 背景色 | 背景 1 | BackColor | 16777215 | #FFFFFF |
6 | 前景色 | テキスト 1, 明るめ 40% | ForeColor | 6710886 | #666666 |
7 | 境界線スタイル | 透明 | BorderStyle | 0 | 基本は透明 個別画面で必要に応じて指定 |
透明 | |||||
実線 | 1 | 実線 | |||
破線1 | 2 | 破線1 | |||
破線2 | 3 | 破線2 | |||
点線1 | 4 | 点線1 | |||
点線2 | 5 | 点線2 | |||
一点鎖線 | 6 | 一点鎖線 | |||
二点鎖線 | 7 | 二点鎖線 | |||
8 | フォント名 | メイリオ | FontName | メイリオ | |
9 | フォントサイズ | 20 | FontSize | 20 | 基本は11 フォームのタイトルは20 |
10 | 太字スタイル |
1 | FontBold | 0 | 標準 |
1 | ヘッダセクション内では 基本は太字 |
||||
太字 | |||||
11 | 文字配置 | 標準 | TextAlign | 0 | 基本は標準 個別画面で必要に応じて指定 |
テキストは左揃え、数値や日付は右揃え | |||||
左 | 1 | 左揃え | |||
中央 | 2 | 中央揃え | |||
右 | 3 | 右揃え | |||
均等割付 | 4 | 文字の間隔を均等にします | |||
12 | 上余白 | 0.08 cm | TopMargin | 45 twip | |
13 | 右余白 | 0.1 cm | LeftMargin | 56 twip | |
14 | 右余白 | 0.1 cm | RightMargin | 56 twip |
通常Accessで空白のフォームを作成した場合、デフォルトではこのヘッダセクション、フッターセクションは表示されませんが、そのフォームをデザインビュー(D)で開き、フォーム上の何もないところをクリックして現れるコンテキストメニューから
フォームヘッダ―/フッタ―(H)
を選択すると、この通常フォーム(詳細セクションと言います)の上下にヘッダセクション(フォーム ヘッダー)とフッタ―セクション(フォーム フッター)が現れます。
詳細セクション
テキストボックス
まず見栄えの良い詳細セクションの中のテキストボックス作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 幅 | cm | width | twip | システム全体の推奨値なし 個別画面で必要に応じて指定 |
2 | 高さ | 0.7cm | Height | 397 twip | |
3 | フォント名 | メイリオ | FontName | メイリオ | |
4 | フォントサイズ | 11 | FontSize | 11 | |
5 | 文字配置 | 標準 | TextAlign | 0 | 基本は標準 個別画面で必要に応じて指定 |
テキストは左揃え、数値や日付は右揃え | |||||
左 | 1 | 左揃え | |||
中央 | 2 | 中央揃え | |||
右 | 3 | 右揃え | |||
均等割付 | 4 | 文字の間隔を均等にします | |||
6 | 上余白 | 0.08 cm | TopMargin | 45 twip | |
7 | 左余白 | 0.1 cm | LeftMargin |
56 twip |
|
8 | 右余白 | 0.1 cm | RightMargin |
56 twip |
ラベル
次に見栄えの良い詳細セクションの中のラベルを作成するために必要なラベルのデザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 幅 | cm | twip | システム全体の推奨値なし 個別画面で必要に応じて指定 |
|
2 | 高さ | 0.7cm | Height | 397 twip | |
3 | 背景色 | 背景 1 | BackColor | 16777215 | #FFFFFF |
4 | 前景色 | テキスト 1, 明るめ 40% | ForeColor | 6710886 | #666666 |
5 | 境界線スタイル | 透明 | BorderStyle | 0 | 基本は透明 個別画面で必要に応じて指定 |
透明 | |||||
実線 | 1 | 実線 | |||
破線1 | 2 | 破線1 | |||
破線2 | 3 | 破線2 | |||
点線1 | 4 | 点線1 | |||
点線2 | 5 | 点線2 | |||
一点鎖線 | 6 | 一点鎖線 | |||
二点鎖線 | 7 | 二点鎖線 | |||
6 | フォント名 | メイリオ | FontName | メイリオ | |
7 | フォントサイズ | 11 | FontSize | 11 | 基本は11 フォームのタイトルは16 |
8 | 太字スタイル | 0 | FontBold | 0 | 詳細セクション内では 基本は標準 |
標準 | |||||
1 | 太字 | ||||
9 | 文字配置 | 標準 | TextAlign | 0 | 基本は標準 個別画面で必要に応じて指定 |
テキストは左揃え、数値や日付は右揃え | |||||
左 | 1 | 左揃え | |||
中央 | 2 | 中央揃え | |||
右 | 3 | 右揃え | |||
均等割付 | 4 | 文字の間隔を均等にします | |||
10 | 上余白 | 0.08 cm | TopMargin | 45 twip | |
11 | 右余白 | 0.1 cm | LeftMargin | 56 twip | |
12 | 右余白 | 0.1 cm | RightMargin | 56 twip |
テキストやラベルの矩形サイズの高さをあわせる際に、意外に重宝するのがフォームのデザインビュー(D)のリボンメニュー「サイズ/間隔」ボタンから呼び出せる
- 高いコントロールにあわせる(T)
- 低いコントロールにあわせる(S)
等の機能たちです。
これらの機能を使うと、揃えたいテキストやラベルの矩形等の複数コントロールをマウスで一括選択し、デザインビュー(D)のリボンメニュー「サイズ/間隔」ボタン経由でこれらを選択すると、選択した矩形の高さを一気に揃えることが出来ます。
また同様に「配置」ボタンも複数コントロールの横方向の座標を一気に揃えるのに重宝するので、いろいろ試して見ることをお勧めします。
コマンドボタン
また見栄えの良い詳細セクションの中のコマンドボタンを作成するために必要なデザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 高さ | 1.2cm | Height | 397 twip | |
2 | フォント名 | メイリオ | FontName | メイリオ | |
3 | フォントサイズ | 11 | FontSize | 11 |
コンボボックス
また見栄えの良い詳細セクションの中のコンボボックスを作成するために必要なデザインビューでのプロパティ名、そのVBAでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 高さ | 0.7cm | Height | 397 twip | |
2 | フォント名 | メイリオ | FontName | メイリオ | |
3 | フォントサイズ | 11 | FontSize | 11 |
リストボックス
最後に見栄えの良い詳細セクションの中のリストボックスを作成するために必要なリストボックスのデザインビューでのプロパティ名、そのVBAでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 高さ | 0.7cm | Height | 680 twip | |
2 | フォント名 | メイリオ | FontName | メイリオ | |
3 | フォントサイズ | 11 | FontSize | 11 |
フッターセクション
次に見栄えの良いフッターセクション作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
コマンドボタン
また見栄えの良いフッターセクションの中のコマンドボタンを作成するために必要なデザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。
項番 | デザインビュー | VBE | 備考 | ||
---|---|---|---|---|---|
プロパティ名 | 設定値 | プロパティ名 | 設定値 | ||
1 | 高さ | 1.2cm | Height | 397 twip | |
2 | フォント名 | メイリオ | FontName | メイリオ | |
3 | フォントサイズ | 11 | FontSize | 11 |
VBAによる実装
以上を踏まえて先ほどご紹介した以下の実装ポリシーを実際に実装してみましょう。
先ほどもご紹介した通り、その考え方は非常にシンプルなもので以下2点です。
- フォーム作成にかかわる共通定数、共通関数、共通プロシージャをVBAの標準モジュールに定義する
- 各フォームのフォームモジュール内にForm_Openイベント発生時に起動されるForm_Open プロシージャの中で標準モジュール内に定義した共通プロシージャを呼び出し、フォーム、あるいはそれぞれのコントロールのプロパティを設定する
標準モジュール内共通定数の定義
まず標準モジュール内に以下のような共通定数を定義します。
Public Const C_ALIGN_標準 As Integer = 0
Public Const C_ALIGN_左 As Integer = 1
Public Const C_ALIGN_中央 As Integer = 2
Public Const C_ALIGN_右 As Integer = 3
Public Const C_ALIGN_均等割り As Integer = 4
Public Const C_BORDER_透明 As Integer = 0
Public Const C_BORDER_実線 As Integer = 1
Public Const C_BORDER_破線1 As Integer = 2
Public Const C_BORDER_破線2 As Integer = 3
Public Const C_BORDER_点線1 As Integer = 4
Public Const C_BORDER_点線2 As Integer = 5
Public Const C_BORDER_一点鎖線 As Integer = 6
Public Const C_BORDER_二点鎖線 As Integer = 7
Public Const C_FONT_BOLD_標準 As Integer = 0
Public Const C_FONT_BOLD_太字 As Integer = 1
Public Const C_STD_HEIGHT_HEADER As Double = 1.8 ' 1.8 cm
Public Const C_STD_TOP As Double = 0.3 ' 0.3 cm
Public Const C_STD_LEFT As Double = 0.6 ' 0.6 cm
Public Const C_STD_HEIGHT_TEXT As Double = 0.7 ' 0.7 cm
Public Const C_STD_HEIGHT_TITLE As Double = 1.4 ' 1.4 cm
Public Const C_STD_FONT_TEXT As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_TITLE As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_BUTTON As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_SIZE_TEXT As Integer = 11 ' 11 points
Public Const C_STD_FONT_SIZE_TITLE As Integer = 20 ' 20 points
Public Const C_STD_FONT_BOLD_TEXT As Integer = C_FONT_BOLD_標準
Public Const C_STD_FONT_BOLD_TITLE As Integer = C_FONT_BOLD_太字
Public Const C_STD_ALIGN_TEXT As Integer = C_ALIGN_標準 ' 標準
Public Const C_STD_ALIGN_LABEL As Integer = C_ALIGN_標準 ' 標準
Public Const C_STD_PADDING_TOP As Double = 0.08 ' 0.08cm
Public Const C_STD_PADDING_LEFT As Double = 0.1 ' 0.1cm
Public Const C_STD_PADDING_RIGHT As Double = 0.1 ' 0.1cm
Public Const C_STD_COLOR_BACK As Long = &HFFFFFF ' 背景 1(白)
Public Const C_STD_COLOR_FORE As Long = &H666666 ' テキスト 1, 明るめ 40%
Public Const C_STD_COLOR_HEADER As Long = &HE5DCD6 ' テキスト 2, 明るめ 80%
Public Const C_STD_BORDER_STYLE As Integer = C_BORDER_透明
以下はこれらのコードの簡単な説明になります。
行番号 | 説明 |
---|---|
1-5 | テキスト、ラベルで使用する文字配置関連の一般共通定数です。 |
7-14 | ラベルの境界線スタイルで使用する文字配置関連の一般共通定数です。 |
16-17 | テキストフォントの/太字設定の一般共通定数です。 |
19 | ヘッダーの高さを標準化するための共通定数です。 |
21-22 | ヘッダー内ラベルの境界線座標をヘッダー内の原点からの位置(TOP、LEFT)をcm指定で標準化するための共通定数です。 |
24-25 | ラベルの境界線の高さを詳細セクション、ヘッダーセクション内で標準化するための共通定数です。 |
27-29 | 詳細セクションで使用されるテキストボックス、ラベル、ボタンあるいはヘッダーセキションで使用されるラベル等で使用されるフォント名を標準化するための共通定数です。 |
31-32 | 詳細セクションで使用されるテキストボックス、ラベル、あるいはヘッダーセキションで使用されるラベル等で使用されるフォントサイズを標準化するための共通定数です。 |
34-35 | 詳細セクションで使用されるテキストボックス、ラベル、あるいはヘッダーセキションで使用されるラベル等で使用されるフォントの太字スタイルを標準化するための共通定数です。 |
37-38 | 詳細セクション、ヘッダーセクションで使用されるテキストボックス、ラベルの文字配置を標準化するための共通定数です。 |
40-42 | 詳細セクションで使用されるテキストボックスの矩形内での余白(上部、左側、右側)を標準化するための共通定数です。 |
44-46 | 詳細セクションで使用される背景色(背景1、テキスト1 明るめ 40%、テキスト2 明るめ 80%)を標準化するための共通定数です。 |
48 | 詳細セクションで使用されるラベルの境界線を標準化するための共通定数です。 |
標準モジュール内共通関数の定義
そして標準モジュール内に以下のような長さの単位をcmからtwipに変換する共通関数 GetTwip を定義します。
Function GetTwip(centi_length As Double) As Integer
Dim dblTwip As Double
On Error GoTo Err_GetTwip
dblTwip = centi_length * 569
GetTwip = Int(dblTwip)
Exit_GetTwip:
Exit Function
Err_GetTwip:
MsgBox Err.Description
Resume Exit_GetTwip
End Function
以下はこれらのコードの簡単な説明になります。
行番号 | 説明 |
---|---|
1 | 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータ centi_length(Double:倍精度浮動小数点数型)の名前を定義しています。 |
3 | 倍精度浮動小数点数型の計算を行うための仮変数 dblTwip を定義します。 |
5 | オーバーフロー等の実行時エラー発生時に例外処理を行うためのラベル Err_GetTwip にジャンプします。 |
7-8 | twip の定義に基づきcm単位の長さからtwip単位の長さ変換を行い整数値としてGetTwipを求めます。 |
10-11 | 正常終了時にこの関数を抜けます。 |
13-15 | 例外処理が発生した場合、その詳細をメッセージボックスに表示し、この関数を抜けます。 |
標準モジュール内共通プロシージャの定義
標準モジュール内にさらに各コントロールのプロパティを共通的に設定する共通プロシージャを定義します。
Public Sub StandardizeTextboxes(frm As Form)
Dim ctl As Control
frm.RecordSelectors = False
frm.Section(acHeader).Visible = True
frm.Section(acHeader).Height = GetTwip(C_STD_HEIGHT_HEADER)
frm.Section(acHeader).BackColor = C_STD_COLOR_HEADER
For Each ctl In frm.Section(acHeader).Controls
With ctl
Select Case TypeName(ctl)
Case "Label"
.Top = GetTwip(C_STD_TOP)
.Left = GetTwip(C_STD_LEFT)
.Height = GetTwip(C_STD_HEIGHT_TITLE)
.FontName = C_STD_FONT_TITLE
.FontSize = C_STD_FONT_SIZE_TITLE
.FontBold = C_STD_FONT_BOLD_TITLE
.BackColor = C_STD_COLOR_BACK
.ForeColor = C_STD_COLOR_FORE
.TextAlign = C_STD_ALIGN_TEXT
.TopMargin = GetTwip(C_STD_PADDING_TOP)
.LeftMargin = GetTwip(C_STD_PADDING_LEFT)
.BorderStyle = C_STD_BORDER_STYLE
.RightMargin = GetTwip(C_STD_PADDING_RIGHT)
Case Else
Debug.Print "いずれの条件も満たさなかったときの処理"
End Select
End With
Next ctl
For Each ctl In frm.Section(acDetail).Controls
With ctl
Select Case TypeName(ctl)
Case "TextBox"
' .Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_TEXT
.FontSize = C_STD_FONT_SIZE_TEXT
.TextAlign = C_STD_ALIGN_TEXT
' .TopMargin = GetTwip(C_STD_PADDING_TOP)
.LeftMargin = GetTwip(C_STD_PADDING_LEFT)
.RightMargin = GetTwip(C_STD_PADDING_RIGHT)
Case "Label"
' .Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_TEXT
.FontSize = C_STD_FONT_SIZE_TEXT
.FontBold = C_STD_FONT_BOLD_TEXT
.BackColor = C_STD_COLOR_BACK
.ForeColor = C_STD_COLOR_FORE
.TextAlign = C_STD_ALIGN_TEXT
' .TopMargin = GetTwip(C_STD_PADDING_TOP)
.LeftMargin = GetTwip(C_STD_PADDING_LEFT)
.BorderStyle = C_STD_BORDER_STYLE
.RightMargin = GetTwip(C_STD_PADDING_RIGHT)
Case "CommandButton"
.Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_BUTTON
.FontSize = C_STD_FONT_SIZE_TEXT
Case "ComboBox"
.Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_TEXT
.FontSize = C_STD_FONT_SIZE_TEXT
Case "ListBox"
.Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_TEXT
.FontSize = C_STD_FONT_SIZE_TEXT
Case Else
Debug.Print "いずれの条件も満たさなかったときの処理"
End Select
End With
Next ctl
For Each ctl In frm.Section(acFooter).Controls
With ctl
Select Case TypeName(ctl)
Case "CommandButton"
.Height = GetTwip(C_STD_HEIGHT_TEXT)
.FontName = C_STD_FONT_BUTTON
.FontSize = C_STD_FONT_SIZE_TEXT
Case Else
Debug.Print "いずれの条件も満たさなかったときの処理"
End Select
End With
Next ctl
End Sub
以下はこれらのコードの簡単な説明になります。
行番号 | 説明 | |
---|---|---|
1 | 各フォームセクションから呼び出されたときのパラメータ Me (つまりそのフォーム自身)をfrmという formオブジェクトに設定します。 | |
3 | ctl をフォーム配下に展開される全てのコントロールとして定義します。 | |
5-8 | フォーム全体の見栄えを整えるためのプロパティを設定する部分。 | |
10-40 | ヘッダーセクション内に含まれるコントロールに対するプロパティを設定する部分。 “acHeader” はラベルを表すAccessの定数です。 |
|
31-32 | ヘッダーセクション内に含まれるラベルのプロパティを設定する部分。 “Label” はラベルを表すAccessのコントロール定数です。 |
|
31-32 | 将来的にヘッダーセクション内に含まれる他のコントロールに対するプロパティを設定する部分。 | |
42-95 | 詳細セクション内に含まれるコントロールに対するプロパティを設定する部分。 “acDetail” はラベルを表すAccessの定数です。 |
|
47-54 | 詳細セクションで使用されるテキストボックスのプロパティを設定する部分。 “Textbox” はテキストボックスを表すAccessのコントロール定数です。 ※下記Labelでのコメントアウトにあわせコメントアウトします。 |
|
56-68 | 詳細セクション内に含まれるラベルのプロパティを設定する部分。 “Label” はラベルを表すAccessのコントロール定数です。 ※このLabel内の .Height と .TopMargin の共通設定はチェックボックスやオプショングループ内で部品として使用されるラベルにも影響を与えることがわかったためコメントアウトしています。 |
|
70-74 | 詳細セクション内に含まれるコマンドボタンのプロパティを設定する部分。 “CommandButton” はコマンドボタンを表すAccessのコントロール定数です。 |
|
76-80 | 詳細セクション内に含まれるコンボボックスのプロパティを設定する部分。 “ComboBox” はコンボボックスを表すAccessのコントロール定数です。 |
|
82-86 | 詳細セクション内に含まれるリストボックスのプロパティを設定する部分。 “ListBox” はリストボックスを表すAccessのコントロール定数です。 |
|
88-89 | 将来的に詳細セクション内に含まれる他のコントロールに対するプロパティを設定する部分。 | |
97-117 | フッターセクション内に含まれるコントロールに対するプロパティを設定する部分。 “acFooter” はフッターを表すAccessの定数です。 |
|
104-108 | フッターセクション内に含まれるコマンドボタンのプロパティを設定する部分。 “CommandButton” はコマンドボタンを表すAccessのコントロール定数です。 |
|
110-111 | 将来的にフッターセクション内に含まれる他のコントロールに対するプロパティを設定する部分。 |
詳細セクション内のラベルの .Height 、 .TopMargin はテキストボックスの .Height 、 .TopMargin と文字の高さの配置を揃える目的で設定していますが
ラベルはチェックボックスや、オプショングループの中でも部品として使用されているため、この副作用としてこれらのラベル位置が下にずれてしまうことがわかっています。
従ってフォームの詳細セクション中でチェックボックスや、オプショングループを使用する際は、必要に応じてこれらの設定をコメントアウトをするか、フォームを開く際のForm_Openプロシージャ内で対象ラベルの .Height 、 .TopMargin を調整することをお勧めします。
各フォームモジュール内のイベントプロシージャForm_Open定義
そして各フォームを開く際に起動されるイベントプロシージャ Form_Open 内にこの 標準モジュール内の StandardizeTextboxes を Me(つまり起動されたフォーム自身)をパラメータとして起動するようにしておけば、標準モジュールの中の共通定義で全てのフォームの定義されたコントロールのプロパティを一括して共通化可能です。
Private Sub Form_Open(Cancel As Integer)
Call StandardizeTextboxes(Me)
End Sub
フォームのフォント名、フォントサイズの変更例
以上を踏まえ、標準モジュールの定数を調整して「顧客マスター登録」というフォームのフォント名、フォントサイズの変更例をご紹介しましょう。
顧客マスター登録フォームプロシージャ
まず以下がメニューフォームのForm_Openプロシージャです。
Private Sub Form_Open(Cancel As Integer)
Call StandardizeTextboxes(Me)
Me.テキスト28.Value = C_STD_FONT_TEXT & " " & C_STD_FONT_SIZE & " pt"
End Sub
共通モジュール内定数を「メイリオ」10ptに変更
このフォーム内Form_Openプロシージャの内容を変更せずに、共通モジュール内の以下の定数を「メイリオ」10ptに変更すると
Public Const C_STD_FONT_TEXT As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_TITLE As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_BUTTON As String = "メイリオ" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_SIZE As Integer = 10 ' 10 points
このフォームのヘッダーセクション部のラベルが「メイリオ」になり、あわせて詳細セクション部のテキストボックス部分が以下のように一括して「メイリオ」10ptに変更なりました。
共通モジュール内定数を「MS Pゴシック」14ptに変更
続いて各フォーム内Form_Openプロシージャの内容を変更せずに、共通モジュール内の以下の定数を「MS Pゴシック」14ptに変更すると
Public Const C_STD_FONT_TEXT As String = "MS Pゴシック" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_TITLE As String = "MS Pゴシック" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_BUTTON As String = "MS Pゴシック" ' メイリオ|MS Pゴシック
Public Const C_STD_FONT_SIZE_TEXT As Integer = 14 ' 11 points
先ほどのフォームのヘッダーセクション部のラベルが「MS Pゴシック」になり、詳細セクション部のテキストボックス部が一括して「MS Pゴシック」14 pt に変更なりました。
つまり標準モジュール配下の4つんの共通定数の設定値を変えるだけで実装済みの全てのフォームに対するヘッダーセクション部のラベル、詳細セクション部のテキストボックスの書体を一括変更出来たわけです。
まとめ
Accessを使ったシステム開発において、そのフォームデザインは、使いやすさと視覚的な一貫性の確保に欠かせない要素です。
また開発の生産性やシステムの保守的な観点からシステムを構成する複数のフォーム上の各コントロールのプロパティが個別に設定されるのは好ましいことではありません。
この記事では、AccessフォームのコントロールプロパティをVBAで一括設定し、統一感のある、保守性に優れた魅力的なフォームを手軽に構築する特別なデザインテクニックをご紹介しました。
あなたもこの特別なデザインテクニックを手中にし、プロのように統一感があり、使いやすさと視覚的な一貫性を両立したAccessフォームを爆速で開発しましょう。
この記事が少しでも読者の方のお役に立てれば幸いです。
方法論はいろいろあリますが、ここではVBAを使ってアプリケーションの中のフォーム、コントロールのプロパティ値を自動設定する特別な方法をご紹介します。