Access VBAのフォームについてお探しですね。

広告

Access VBAで画面を自由に操ろう!フォームの開閉・データ受け渡し・色変更の基本ワザ

Microsoft Accessで業務システムを作るとき、データベースの機能だけじゃなくて、「使いやすい画面(フォーム)」を作ることがすごく大事です。

ボタンを押したら画面が切り替わったり、入力した内容によって背景の色が変わったり――こういった動きを加えることで、Accessは単なるデータの置き場所から、本格的な業務アプリに生まれ変わります。

この記事では、Access VBAを始めたばかりの人がまず覚えておきたい「フォーム操作」の基本ワザをまとめました。

フォームの開け閉めから、画面同士でのデータのやり取り、見た目を変える色の変更まで、実際の仕事でよく使うコードを解説します。

これらを組み合わせれば、誰でも使いやすいシステムが作れるようになりますよ。

まずはここから!フォームを開く・閉じる基本コード

Access VBAで一番よく使うのが、フォームを開いたり閉じたりする操作です。

マクロでもできますが、VBAを使えば「特定の条件に合うデータだけを表示する」とか「作業が終わるまで他の操作をさせない」といった細かい制御ができるようになります。

ここでは基本となる `DoCmd` というオブジェクトを使った操作を見ていきましょう。

フォームを開く(DoCmd.OpenForm)

フォームを開くには `DoCmd.OpenForm` というメソッドを使います。

基本の形はとってもシンプルですが、オプション(引数)を指定することでいろんな開き方ができます。

たとえば、メニュー画面からデータ入力画面を開いたり、一覧から特定の詳細画面を開いたりするときに使います。

一番シンプルな書き方はこちら。

「フォーム名」のところには、すでに作ってあるフォームの名前をダブルクォーテーションで囲んで書いてください。

“`vba
‘ シンプルに開く
DoCmd.OpenForm “F_入力画面”
“`

実際の仕事では、ただ開くだけじゃなくて「特定のデータだけを表示したい」ってことがよくあります。

そんなときは `WhereCondition` という引数を使います。

たとえば、顧客IDが1001のデータだけを表示してフォームを開きたいときは、こんな風に書きます。

“`vba
‘ 条件を指定して開く(顧客IDが1001のデータだけ表示)
DoCmd.OpenForm “F_顧客詳細”, , , “顧客ID = 1001”
“`

また、フォームを開いている間、ユーザーに他の操作をさせたくないときは「ダイアログモード」を使います。

これは、大事な確認画面や必ず入力してほしい画面で役立ちます。

`WindowMode` に `acDialog` を指定すると、そのフォームを閉じるまで次の処理に進まないようにできます。

“`vba
‘ ダイアログモードで開く(閉じるまで次の処理が待機される)
DoCmd.OpenForm “F_確認画面”, , , , , acDialog
MsgBox “確認画面が閉じられました”
“`

フォームを閉じる(DoCmd.Close)

開いたフォームを閉じるには `DoCmd.Close` メソッドを使います。

何も指定しないと「今開いているウィンドウ」を閉じようとしますが、間違いを防ぐために、閉じるものの種類と名前をはっきり書くのがおすすめです。

“`vba
‘ 特定のフォームを閉じる
DoCmd.Close acForm, “F_入力画面”
“`

データを変更した後にフォームを閉じようとすると、Accessが「変更を保存しますか?」って聞いてくることがあります。

VBAで自動的に保存して閉じたいときは、`Save` に `acSaveYes` を指定すれば、ユーザーに確認せずにスムーズに終了できます。

画面同士で値を受け渡すテクニック(連携)

業務システムを作っていると、「一覧画面で選んだ商品のIDを、詳細画面に渡したい」みたいな場面が必ず出てきます。

フォーム同士は別々に動いているので、何かしらの方法で情報を橋渡ししてあげる必要があります。

ここでは、スマートでプロっぽい方法と、わかりやすい方法の2つを紹介します。

OpenArgsを使って値を渡す

一番おすすめなのが、`OpenForm` メソッドの最後の引数である `OpenArgs` プロパティを使う方法です。

これは「フォームを開くときに、ついでに荷物(データ)を持たせる」みたいなイメージです。

渡す側と受け取る側の両方にコードを書く必要がありますが、フォーム同士のつながりが緩くて、エラーが起きにくいしっかりした作りになります。

まず、**渡す側(呼び出し元)** のコードです。

引数の最後(7番目)に渡したい値を指定します。

“`vba
‘ ID「1001」をOpenArgsとして渡してフォームを開く
DoCmd.OpenForm “F_顧客詳細”, , , , , , “1001”
“`

次に、**受け取る側(開かれるフォーム)** のコードです。

フォームが開くとき(読み込み時)に起きる `Load` イベントで `OpenArgs` の中身をチェックして、処理を行います。

“`vba
‘ F_顧客詳細のLoadイベント
Private Sub Form_Load()
‘ OpenArgsに値が入っているかチェック
If Not IsNull(Me.OpenArgs) Then
‘ 渡されたIDをテキストボックスなどにセットする
Me.txt顧客ID.Value = Me.OpenArgs

‘ 必要なら、そのIDでフィルタをかけるなどの処理を追加
End If
End Sub
“`

開いたフォームのコントロールを直接操作する

もう一つの方法は、フォームを開いた直後に、そのフォームの中にあるテキストボックスなどの「コントロール」に直接値を入れる方法です。

わかりやすくて直感的な反面、フォームが開くタイミングや読み込みの速さによってはエラーになることがあるので注意が必要です。

この方法を使うときは、フォームを開いた次の行に代入処理を書きます。

開いた先のフォームを指定するために `Forms!フォーム名!コントロール名` という書き方を使います。

“`vba
‘ フォームを開いてから、値を代入する
DoCmd.OpenForm “F_顧客詳細”

‘ 開いたフォームの「txt顧客ID」に値をセット
Forms!F_顧客詳細!txt顧客ID.Value = 1001
“`

この方法は `OpenArgs` を使う方法より短く書けますが、フォームが開いていない状態で参照しようとするとエラーになります。

必ず `OpenForm` で開いた後に書くようにしましょう。

見やすさアップ!フォームやコントロールの色を変える

画面の色を動的に変えることで、ユーザーに注意を促したり、状態の変化をパッと伝えたりできます。

たとえば「必須項目が未入力のときに背景を赤くする」とか「特定の条件を満たしたときに文字を青くする」といった処理です。

背景色(BackColor)と文字色(ForeColor)

VBAでは、コントロールの `BackColor`(背景色)と `ForeColor`(文字色)というプロパティを操作して色を変更します。

色は数値で指定しますが、`RGB` 関数を使うと「赤・緑・青」の配分で指定できるので、感覚的に色を作れます。

このコードは、コマンドボタンをクリックしたときに、特定のテキストボックスの背景色を薄い赤色に変える例です。

“`vba
‘ 背景色を薄い赤に変更する
Me.txt氏名.BackColor = RGB(255, 200, 200)

‘ 文字色を赤に変更する
Me.txt氏名.ForeColor = RGB(255, 0, 0)
“`

元の色に戻したいときは、普通の色(白など)のRGB値を指定するか、あらかじめ用意されている色コードを使います。

たとえば、白は `vbWhite`、黒は `vbBlack`、赤は `vbRed` といった定数が使えます。

条件によって色を変える実用例

実際の仕事では、ユーザーの操作(イベント)に合わせて色を変えるのが一般的です。

よくあるのが「カーソルが当たっている(フォーカスがある)入力欄だけ色を変えて、どこに入力しているかわかりやすくする」という処理です。

これには `Enter`(フォーカス取得時)イベントと `Exit`(フォーカス喪失時)イベントを使います。

* **Enterイベント**:入力欄に入ったとき、背景色を黄色にする
* **Exitイベント**:入力欄から出たとき、背景色を白に戻す

“`vba
‘ フォーカスが当たったとき(背景を黄色に)
Private Sub txt氏名_Enter()
Me.txt氏名.BackColor = RGB(255, 255, 200)
End Sub

‘ フォーカスが外れたとき(背景を白に戻す)
Private Sub txt氏名_Exit()
Me.txt氏名.BackColor = vbWhite
End Sub
“`

こんな風に細かく色を制御するだけで、システムの使いやすさがグッと上がります。

ただし、色を使いすぎると逆に見づらくなるので、警告色や強調色など、ルールを決めて使うことが大切です。

使いやすさを高める画面操作の応用ワザ

基本操作に加えて、もう少し踏み込んだ「画面制御」のテクニックを知っておくと、市販のアプリみたいな洗練された動きが実現できます。

ここでは、ウィンドウサイズの調整やフォーカスの移動など、仕上げに使えるコードを紹介します。

フォームの最大化・最小化・サイズ復元

メインメニューを開いたときに画面いっぱいに表示したいとか、逆に元のサイズに戻したいときは、`DoCmd.Maximize`(最大化)、`DoCmd.Minimize`(最小化)、`DoCmd.Restore`(元のサイズに戻す)を使います。

これらは基本的に `Form_Load` イベントや `Form_Open` イベントに書きます。

“`vba
Private Sub Form_Load()
‘ フォームが開いた瞬間に最大化する
DoCmd.Maximize
End Sub
“`

特定の場所にカーソルを移動させる(SetFocus)

画面を開いたときや、入力エラーが出たときに、特定の入力欄にカーソル(フォーカス)を飛ばしたいことがあります。

これには `SetFocus` メソッドを使います。

ユーザーがマウスでクリックする手間が省けるので、入力作業の効率化に直結します。

“`vba
‘ 「txt氏名」テキストボックスにカーソルを移動する
Me.txt氏名.SetFocus
“`

画面のちらつきを抑える(Echo)

VBAで連続してたくさんの処理をすると、画面がパタパタと切り替わったり、再描画のちらつきが見えたりすることがあります。

これを防ぐには `Application.Echo` メソッドを使って、処理中の画面更新を一時的にストップします。

“`vba
‘ 画面更新を停止(処理中の画面変化を見せない)
Application.Echo False

‘ ~ ここで重い処理や複数のフォーム操作を行う ~

‘ 処理が終わったら必ず画面更新を再開する
Application.Echo True
“`

注意点として、`Echo False` にしたまま処理がエラーで止まってしまうと、画面が更新されずにフリーズしたように見えてしまいます。

必ずエラー処理(`On Error GoTo …`)と組み合わせて、最終的には `Echo True` が実行されるように書いてください。

Access VBAによる画面操作は、ユーザーの使い心地(UX)を直接左右する大事な要素です。

まずは「開く・閉じる」から始めて、徐々に「値を渡す」「色を変える」といったテクニックを取り入れて、使い心地の良いシステムを目指してください。

広告