トップ > スキル : アプリケーション > VBA for Access > 応用編(Accessで使える活用技)

VBA_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関数を使用しています。


動作を実行して、空データの場合はメッセージが表示されて印刷が行われません。