【入門編】フォームのOnResizeイベントでコントロール配置を動的に最適化するレスポンシブUIの基礎 – Access VBA解析バイブル

スポンサーリンク

Accessで「プロ級のUI」を作る!フォームの動的リサイズ術:レスポンシブな画面設計の極意

こんにちは。現場で泥臭く、かつエレガントな自動化システムを構築し続けているエンジニアです。

Accessを使っていて、「ウィンドウを広げたのに、画面の右側がスカスカでカッコ悪い」「サブフォームのサイズが変わらず、いちいちスクロールするのが面倒」と感じたことはありませんか?

実は、Accessのフォームは少しの工夫で「レスポンシブ(可変対応)」にできます。今日は、Access VBAの心臓部である`OnResize`イベントを使い、コントロールを自由自在に操るための「極限の基本」を伝授しましょう。

1. なぜ「OnResize」を使うのか?

Accessのフォームには、画面のサイズが変わった瞬間に発火する`OnResize`(リサイズ時)というイベントがあります。

多くの初学者は「固定サイズ」で画面を作りますが、これだと解像度の異なるPCで表示した時に、レイアウトが崩壊します。`OnResize`を使えば、フォームの幅や高さに合わせて、中のコントロールを「追従させる」ことができるのです。

必要な心構え

  • 基準を知る: フォームの `InsideWidth`(内部幅)と `InsideHeight`(内部高さ)を常に監視します。
  • 計算する: フォームが広がった分、コントロールの幅や位置を「差分」で加算します。

2. 実践!コントロールを自動追従させるコード

さっそく、フォーム上の「サブフォーム」と「閉じるボタン」を自動でリサイズ・配置するコードを見てみましょう。

フォームのプロパティシートで、`イベント`タブの`リサイズ時`に「[イベント プロシージャ]」を選択し、以下のコードを記述してください。

Private Sub Form_Resize()
‘ 【重要】エラーハンドリングは自動化の命
‘ フォームが閉じている最中などにイベントが発生して落ちるのを防ぎます
On Error Resume Next

‘ 1. サブフォームをフォームの幅に合わせて横に広げる
‘ フォームの幅から、左右の余白(ここでは100twip程度)を引いて調整
Me.subMain.Width = Me.InsideWidth – 300

‘ 2. サブフォームの高さを調整
‘ 下部にボタンがある場合、その分を引いて高さを確保
Me.subMain.Height = Me.InsideHeight – 1000

‘ 3. 「閉じる」ボタンを常に右下に配置する
‘ フォームの右端からボタンの幅分だけ左にずらす
Me.btn_Close.Left = Me.InsideWidth – Me.btn_Close.Width – 200

‘ フォームの下端からボタンの高さ分だけ上に配置
Me.btn_Close.Top = Me.InsideHeight – Me.btn_Close.Height – 200
End Sub

コードのここがポイント!

  • Twip(トウィップ)単位: Accessの座標系は`twip`(1インチの1/1440)です。ピクセルではありません。最初は戸惑いますが、この「単位」を意識するだけで、座標計算が劇的に正確になります。
  • `On Error Resume Next`: リサイズイベントは非常に頻繁に発生します。微細なエラーでシステムが停止しないよう、この魔法の呪文で「無視」させるのが現場の定石です。

3. 陥りやすい「罠」と対策

① 画面がチカチカする(再描画のオーバーヘッド)

リサイズ中にコントロールを動かすと、描画が追い付かずに画面がチラつくことがあります。そんな時は、コードの冒頭に `Application.Echo False` を入れ、最後に `True` に戻すことで描画を一時停止させるとスムーズになります。

② コントロールが小さくなりすぎて消える

最小サイズを制限しましょう。以下のように記述します。

‘ フォームの幅が狭くなりすぎた場合、最小サイズで固定する
If Me.InsideWidth < 5000 Then Me.InsideWidth = 5000 ---

4. プロへの第一歩:管理をスマートに

今回は個別のコントロールを操作しましたが、フォームにコントロールが50個あったらどうしますか?

いちいちコードを書くのは非効率ですよね。そんな時は、`For Each` ループを使って、「名前の頭に特定の文字があるコントロールを一括リサイズする」という仕組みを作ります。

「名前が `resize_` で始まるコントロールは、すべて右端に寄せる」といった設計にすれば、新しいボタンを追加するだけで自動的にレスポンシブ対応が完了します。これこそが、メンテナンス性の高いシステム開発の第一歩です。

最後に:Accessを「ただのデータベース」にしないために

Access VBAは、古い言語だと思われがちです。しかし、APIやオブジェクトモデルを深く理解すれば、これほど手軽に「自分だけの業務アプリケーション」を構築できる強力な武器は他にありません。

今回紹介した`OnResize`は、まさにユーザー体験(UX)を向上させるための入り口です。コードをコピペして終わりにするのではなく、「なぜこの数字を引くのか?」「どうすればもっとスマートに書けるか?」をぜひ考えてみてください。

ここをクリアできれば、あなたはもうAccessの初心者ではありません。 次は、APIを叩いて外部と連携する領域へ踏み出していきましょう。応援していますよ!

タイトルとURLをコピーしました