トップ > スキル : アプリケーション > VBA for Access > 応用編(Accessで使える活用技)
入力できる文字数を制限する
一般的にコード番号やID番号などは、入力できる文字数(桁数など)が決まっていることが多いです。例えば、上限が2ケタなのに、3桁以上入力してしまうようなミスも起こりやすいです。
フォームのフィールドの入力規則とLen関数を組み合わせることで、入力できる文字数を制限できます。これは、VBAで処理を作るのではなく、フォームに用意されているプロパティを使います。

① 文字数(桁数)を制限したいテキストボックスのプロパティシートを表示します。
② [データ]タブを選択します。
③ [入力規則]プロパティに「Len([顧客ID])=4と入力します。
※ Len関数は、フィールドに入力したデータの文字数を返す関数で、入力規則と組み合わせることによって入力したデータの桁数をチェックすることができます。ただし、数値データは不可です。値はの「4」は文字数の制限は4桁としています。5桁以上の入力は受け付けません。

※ Len関数の文字数制限を設定できるのはテキスト型なので、入力の際、日本語入力モードになりますので、あらかじめ半角英数モードに設定しておくと入力モードの切り替えの手間が省けます。

チェックボックスでコントロールを表示・非表示
入力フォームには、入力できるコントロール類を配置しますが、通常は入力する必要がなく、必要な時だけ表示したいコントロールをチェックボックスで表示・非表示を切り替えることができます。
例えば、商品情報を入力するフォームがあり、販売が終息した時にその販売理由を入力できるコントロールを表示することができます。

① 設定するチェックボックス(ここでは販売終息)のプロパティシートを表示します。
② チェックボックスの[更新後処理]プロパティをイベントプロシージャにして、ビルドボタンをクリックします。
③ 次のプロシージャを入力します。
Private Sub 販売終息_AfterUpdate() On Error GoTo Error_go If (販売終息 = True) Then 終息理由.Visible = True ElseIf (販売終息 = False) Then 終息理由.Visible = False End If Exit_go: Exit Sub Error_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
※ このプロシージャで販売終息のチェックボックスで終息理由のコントロールを表示・非表示できますが、次のレコードにカレントレコードが移動した時、そのレコードにも販売終息の設定が有効となり、チェックを入れていないのに終息理由のコントロールが表示されてしまいます。
※ レコードが移動した時に、移動先の販売終息のチェック状態を判断して終息理由を表示・非表示に切り替えるには、フォームの[レコードの移動時]にも同じプロシージャを作成する必要があります。
④ 次のプロシージャをフォームの[レコード移動時]プロパティのイベントプロシージャを作成します。
Private Sub Form_Current() On Error GoTo Error_go If (販売終息 = True) Then 終息理由.Visible = True ElseIf (販売終息 = False) Then 終息理由.Visible = False End If Exit_go: Exit Sub Error_go: MsgBox Err.Number & ":" & Err.Description Resume Exit_go End Sub
動作を確認すると、販売終息のチェックボックスにオンになっていない時は、終息理由のコントロールは非表示になっています。

チェックボックスにチェックを入れると終息理由のコントロールが表示されます。

カーソルのあるコントロールに背景色を付ける
たくさんのレコードが一覧表示されているフォームやクエリで作業をしている時、今どのコントロールを操作しているかが分かると視覚的に作業しやすくなります。Accessでは、条件付き書式の機能を使うと、フォーカスのある(カーソルのある)コントロールに背景色や前景色に色を付けることができます。

① 設定を行いたいコントロールをすべて選択します。
② 2007バージョンであれば[フォームデザインツール]タブの[フォント]グループの[条件付き書式]ボタンをクリックして、[条件付き書式設定]ダイアログボックスを表示させます。(2003バージョン以前であれば、メニュー[書式]の[条件付き書式]を選択します。)

③ [条件1]のコンボボックスは「フォーカスのあるフィールド」を設定します。
④ [塗りつぶし/背景色]ボタンから任意の色を選択して、[OK]ボタンをクリックします。
※ 条件付き書式は視覚的に強調してくれますので、利用しやすく、応用が利く機能です。
フォームビューに切り替え、カーソル位置を変えると、フォーカスのあるコントロールの背景色に色が付くので、今どこに注目しているかが分かりやすくなります。

空データの印刷プレビュー時にメッセージを表示させる
印刷する時は、一旦印刷プレビューにして、印刷イメージを確認してから印刷を実行しますが、印刷プレビューをしたものの該当するレコードがない場合は見出ししか表示されないので、ユーザはレポートをキャンセルする必要があります。また、通常の業務でよく印刷をするレポートであれば、印刷プレビューを行わないでいきなり印刷を実行することもあります。その時に該当するレコードがない場合は、印刷の無駄が発生します。
レポートを実行した時、該当するレコードがない(空データ)場合に印刷しないメッセージを表示して、印刷しない設定ができます。

① 設定するレポートのプロパティシートを表示させます。
② [レポート]の[イベント]タブを選択して、[空データ時]プロパティをイベントプロシージャにして、ビルドボタンをクリックします。
③ 次のプロシージャを入力します。
Private Sub Report_NoData(Cancel As Integer) On Error GoTo NoData_Err Beep MsgBox "印刷するデータがありません", vbInformation, "印刷データなし" End NoData_Exit: Exit Sub NoData_Err: MsgBox Err.Number & ":" & Err.Description Resume go_Exit End Sub
※ レポートに該当するデータがないと判断した時(空データ時)に処理全体を中止するコマンド(End)を呼び出すことで、Accessが空レポートを印刷する前に処理を強制的に終了させます。ユーザには、強制的に終了させる旨のメッセージを表示させる配慮が必要ですので、MsgBox関数を使用しています。
動作を実行して、空データの場合はメッセージが表示されて印刷が行われません。
