【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう

Accessを使ったシステム開発において、そのフォームデザインは、使いやすさと視覚的な一貫性の確保に欠かせない要素です。

また開発の生産性やシステムの保守的な観点からシステムを構成する複数のフォーム上の各コントロールのプロパティが個別に設定されるのは好ましいことではありません。

この記事では、AccessフォームのコントロールプロパティをVBAで一括設定し、統一感のある、保守性に優れた魅力的なフォームを手軽に構築する特別なデザインテクニックをご紹介します。

あなたもプロのように統一感があり、使いやすさと視覚的な一貫性を両立したAccessフォームの特別なデザインテクニックを手に入れませんか。

はじめに

フォームデザインの重要性

Access では非常に簡単にフォーム開発が出来てしまうので、ややもすると一貫性のないフォームデザインを量産してしまう可能性があります。

しかし、以下のような観点、あるいは開発生産性/保守性向上の観点からこのフォームデザインが重要であることは皆さんもご存じのとおりです。

項番 観点 詳細
1 ユーザーエクスペリエンスの向上

良いフォームデザインは、ユーザーがアプリケーションを使う際の体験を向上させます。

分かりやすいレイアウト、一貫性のある色使い、わかりやすいコントロール配置などが、ユーザーがアプリケーションをよりスムーズに操作できるようにします。

2 信頼性とプロフェッショナリズムの向上

フォームデザインは、アプリケーションやデータベースの信頼性とプロフェッショナリズムを示す重要な要素です。

整然としたデザインは、ユーザーに対して信頼性の高い印象を与え、プロフェッショナルなアプローチを示す手段となります。

3 誤操作の軽減

適切なデザインは、誤操作やデータ入力ミスを最小限に抑えるのに役立ちます。

例えば、コントロールの大きさや間隔を適切に設定することで、ユーザーが誤って間違ったボタンをクリックしたり、誤った情報を入力したりするリスクを軽減できます。

4 効率性の向上

適切なフォームデザインは、作業の効率性を高める助けとなります。

必要な情報が視覚的に整理されている場合、ユーザーは素早く必要なデータを見つけることができ、業務の迅速な進行が可能となります。

5 ユーザーサポートの軽減

良いフォームデザインは、ユーザーサポートの必要性を減少させることがあります。

分かりやすいラベル、ヒント、エラーメッセージなどが適切に配置されていれば、ユーザーは操作方法を理解しやすくなり、サポートへの依存が減ります。


しかし、そうは言っても具体的にはどうすればいいのでしょう。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
しらかば堂

方法論はいろいろあリますが、ここではVBAを使ってアプリケーションの中のフォーム、コントロールのプロパティ値を自動設定する特別な方法をご紹介します。

 

コラム:Macintosh human interface guideline について

1992年初版の洋書ですが、しらかば堂が以前読んで(正確に言うと眺めて)
最初から世界を目指す企業というのは ここまで考慮するのか…と感動した

Macintosh human interface guideline

のPDFが現在無料でダウンロードできます。

この書籍にはフォームのようなユーザーインターフェース開発において考慮すべき基本原則が多数記述されていますので。興味のある方はぜひご覧ください。

 

プロパティシートを使ったプロパティ設定の方法

フォーム作成を行う場合、通常はフォーム、あるいはそのフォーム内のコントロールのプロパティ値はそのデザインビュー中のプロパティシートでそのプロパティ値を1つずつ設定します。

例えば以下の例は「Main」というフォーム内に配置された「テキスト1」というコントロールを選択後に画面右側に現れるプロパティシートです。

自分も含めたAccessの初学者が参照する学習書には概ねこのプロパティシート上でプロパティの値を設定することが基本とされています。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
テキスト1のプロパティシート

 

しかしこの方法では、フォームの数だけ、あるいはコントロールの数だけプロパティシート上の無数のプロパティを設定しなければなりません。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
しらかば堂

これ考えただけで気が遠くなります…。

VBAを使ったプロパティ設定方法

ところでAccess やVBAの学習が進むと、実はVBAでこれらのプロパティを設定できることに気が付きます。

以下は先ほどの「Main」フォームに紐づいたVBAのForm_Mainモジュール内にForm_Openイベント発生時に起動されるForm_Open プロシージャ内のコーディング例ですが

左側に表示されたVBE内のプロパティウインドウに表示されたプロパティの名前を確認しながら、

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう


つまり

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とは

この Me はこのプロシージャが呼び出される契機となったフォーム自身、つまりここでは「Main」フォームのことを指します。つまり

Me.テキスト1.Height = 397 ' 0.7cm


Forms("Main").テキスト1.Height = 397 ' 0.7cm


と同じ意味で Main フォーム上の テキスト1 というコントロールの高さを
397twip = 0.7cm に設定するという意味です。

 

コラム:twip(typographical)とは

twip(typographical)は長さの単位の国際的なシステム (SI) の基本単位です。

  • 1cm =  569.07163929053 twip
  • 1 twip = 1.757248E-3 cm

 

コラム:Form_Openイベントとは

Form_Openイベントは、Accessのウィドウイベントの1つで、以下のようにフォームが開き最初のレコードが表示される前、あるいはレポートがプレビュー、印刷される前に発生し、このイベントに紐づいたForm_Open というイベントプロシージャが起動されます。

項番 イベント名 発生タイミング
1 Form_Openイベント フォームが開き最初のレコードが表示される前、あるいはレポートがプレビュー、印刷される前に発生します
2 Loadイベント フォームあるいはレポートが開きレコードが表示されるときに発生します
3 Activateイベント フォームあるいはレポートがフォーカスを受け、アクティブになるときに発生します

なおこれらのウィドウイベントは Open → Load → Activate の順に発生します。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
しらかば堂

でもこの方法ではフォーム内のコントロールのプロパティシートに手書きで設定しているのとあまり変わりません。

つまりフォーム毎にこういったプロパティ設定用のVBAステートメントをいちいち記述しないといけないので手間暇があまり変わりません。

しかもフォームのデザインモードで各コントロールのプロパティは日本語表記なのに、VBE側プロパティ表記では英語表記なところも、残念なところです。

VBAを使った一括プロパティ設定の考え方

ではどうしたらよいでしょう。

実はこれらのプロパティ設定を各フォームのモジュール毎ではなく、標準モジュールにこれらのプロパティを共通化記述することで、非常にシンプルにこれらが解決できます。

その要点は以下2点です。

  1. フォーム作成にかかわる共通定数、共通関数、共通プロパティ設定を行う共通プロシージャをVBAの標準モジュールに定義する
  2. 各フォームのフォームモジュール内にForm_Openイベント発生時に起動されるForm_Open プロシージャの中で先ほど標準モジュール内に定義した共通プロパティ設定を行う共通プロシージャを呼び出し、フォーム、あるいはそれぞれのコントロールのプロパティを設定する

ただ先ほどちらっとご見せしたように、プロパティシート上のコントロールのプロパティは無数にありますし、プロパティの日本語、英語問題もあり、なかなか整理するのは大変です。

見栄えを整える一般的なプロパティとは

そこでまず、見栄えを整えるための一般的なプロパティとは何なのかについてまず整理しましょう。

具体的には株式会社インフォース 前野好太郎著の「中小企業向けAccess開発実践ノウハウ」の情報を筆頭に、他の情報ソースも参照しながら必要と思われる一般的なプロパティを抜粋し、出来上がったプロパティリストは以下の通りです。

項番 プロパティ 推奨設定
1 配色 基本は2色とすべき
2 フォント フォントの種類 機種依存性の少ないフォントを選択
プロポーショナルフォント:
 メイリオ(英語)、MS Pゴシック、MS P明朝
等幅フォント:
 メイリオ(漢字)、MS ゴシック、MS 明朝
文字装飾 使用しない
フォントの大きさ ラベル、テキストボックス、コマンドボタン含め統一する
3 ラベル
テキストボックス
サイズと余白 入力できる文字数の最大数を考慮して統一すべき
立体表示 使用しない
背景スタイル 以下から選択
「通常」(背景色を表示)
「透明」(背景色を透過)
境界線 境界線スタイル=実線
境界線色=透明
境界線幅=細線
オブジェクトの背景色 白:通常入力時
黄:入力された値を元にデータ表示するとき
赤:マスタで設定された値を元にしたプルダウン入力
オブジェクトの配置 複数オブジェクトを配置する際には幅をそろえる。また5:8(1:1.618)という黄金比を活用する。
【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
しらかば堂

前野好太郎著の「中小企業向けAccess開発実践ノウハウ」は、以下になりますので、必要に応じてお求め下さい。

対象プロパティの選定、VBA化に向けた読み替え、推奨設定値の選定

次に先ほどのリストから具体的な対象プロパティを選定し、VBAによる具体的な実装に向け、デザインビューとVBE環境間でのプロパティ名の読み替えを行い、さらに推奨設定値についてもまとめておく必要があります。

そしてデザインビューとVBE間でcmからtwipへの長さ単位の変換や、デザインビュー側で既定値として意味表現している設定値をVBA側では実際の設定値に翻訳する作業も必要です。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
しらかば堂

以下は先ほどの「中小企業向けAccess開発実践ノウハウ」から抜粋した見栄えを整える一般的なプロパティをベースに、しらかば堂が実際に動作確認しながら抜粋したプロパティ、推奨設定値の一覧になります。

フォーム

まず見栄えの良いフォーム作成のための、デザインビューでのプロパティ名、そのVBEでの対応プロパティ名、そして推奨値は以下になります。

項番 デザインビュー VBE 備考
プロパティ名 設定値 プロパティ名 設定値
1 レコードセレクタ はい RecordSelectors False

 

コラム:レコードセレクタとは

Access フォームの「レコードセレクタ」は、フォーム内の各レコードを識別し、選択、表示、編集するための▶アイコンを伴った下の図で赤枠で囲まれたエリアを指します。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう

ヘッダーセクション

次に見栄えの良いヘッダーセクション作成のための、デザインビューでのプロパティ名、その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)
を選択すると、この通常フォーム(詳細セクションと言います)の上下にヘッダセクション(フォーム ヘッダー)とフッタ―セクション(フォーム フッター)が現れます。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
フォームヘッダー/フッターの作成方法

 

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
ヘッダーセクションとフッタセクション

詳細セクション

テキストボックス

まず見栄えの良い詳細セクションの中のテキストボックス作成のための、デザインビューでのプロパティ名、その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)のリボンメニュー「サイズ/間隔」ボタン経由でこれらを選択すると、選択した矩形の高さを一気に揃えることが出来ます。

また同様に「配置」ボタンも複数コントロールの横方向の座標を一気に揃えるのに重宝するので、いろいろ試して見ることをお勧めします。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう

コマンドボタン

また見栄えの良い詳細セクションの中のコマンドボタンを作成するために必要なデザインビューでのプロパティ名、その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点です。

  1. フォーム作成にかかわる共通定数、共通関数、共通プロシージャをVBAの標準モジュールに定義する
  2. 各フォームのフォームモジュール内に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テキストボックス.Height.TopMargin と文字の高さの配置を揃える目的で設定していますが

ラベルはチェックボックスや、オプショングループの中でも部品として使用されているため、この副作用としてこれらのラベル位置が下にずれてしまうことがわかっています。

従ってフォームの詳細セクション中でチェックボックスや、オプショングループを使用する際は、必要に応じてこれらの設定をコメントアウトをするか、フォームを開く際のForm_Openプロシージャ内で対象ラベルの .Height.TopMargin を調整することをお勧めします。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
ラベルに対する.Height と .TopMargin 共通設定の影響を受けたチェックボックスとオプショングループ
【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう
ラベルに対する.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に変更なりました。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう

共通モジュール内定数を「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 に変更なりました。

【特集】AccessフォームのコントロールプロパティをVBAで一括設定して見ばえを統一しよう


つまり標準モジュール配下の4つんの共通定数の設定値を変えるだけで実装済みの全てのフォームに対するヘッダーセクション部のラベル、詳細セクション部のテキストボックスの書体を一括変更出来たわけです。

まとめ

Accessを使ったシステム開発において、そのフォームデザインは、使いやすさと視覚的な一貫性の確保に欠かせない要素です。

また開発の生産性やシステムの保守的な観点からシステムを構成する複数のフォーム上の各コントロールのプロパティが個別に設定されるのは好ましいことではありません。

この記事では、AccessフォームのコントロールプロパティをVBAで一括設定し、統一感のある、保守性に優れた魅力的なフォームを手軽に構築する特別なデザインテクニックをご紹介しました。

あなたもこの特別なデザインテクニックを手中にし、プロのように統一感があり、使いやすさと視覚的な一貫性を両立したAccessフォームを爆速で開発しましょう。

この記事が少しでも読者の方のお役に立てれば幸いです。