こんにちは。現場で「動かないAccess」を「爆速のシステム」に作り変えてきたチーフアーキテクトです。
Accessフォームを作っていて、「ウィンドウを広げたら、右側のボタンが消えてしまった」「リストボックスの幅が固定で使いにくい」と悩んだことはありませんか?
実は、Accessのフォームは単に配置するだけでは「生き物」のように変化してくれません。今回は、AccessのUIを現代的なレスポンシブデザインに進化させるための「OnResizeイベントによる動的制御」という奥義を伝授します。
ここをクリアすれば、あなたのAccessは「単なる帳票ツール」から「洗練された業務アプリケーション」へと一皮むけますよ。
—
1. なぜ「OnResize」なのか?:オブジェクトの呼吸を理解する
Accessには、フォームが読み込まれたり、ウィンドウのサイズが変わったりした瞬間に発生するイベントがあります。それが`OnResize`です。
VBAにおいて「フォームのサイズが変わる」=「親コンテナの境界線が塗り替えられる」ことを意味します。このタイミングをフックして、中に配置されたコントロール(ボタンやテキストボックス)の位置とサイズを再計算してやる。これがレスポンシブUIの正体です。
陥りがちな罠:ハードコーディングの呪縛
初心者の多くは、コントロールの座標を「Left = 1000, Width = 5000」のように固定値で書いてしまいます。これでは画面解像度が変わった瞬間にレイアウトが崩壊します。「親(フォーム)のサイズを基準にした相対値」で考えるのが、エンジニアの流儀です。
—
2. 実践:コントロールを自動追従させるコード
以下のコードを、フォームのモジュール(コード画面)に貼り付けてみてください。
‘ フォームのサイズ変更イベントで実行されるプロシージャ
Private Sub Form_Resize()
On Error Resume Next ‘ 万が一の描画エラーで処理を止めないための安全策
‘ フォームの現在の幅と高さを取得
Dim formWidth As Long
Dim formHeight As Long
formWidth = Me.InsideWidth
formHeight = Me.InsideHeight
‘ [txtMain] というテキストボックスをフォームの幅いっぱいに広げる例
‘ 余白を100twipずつ確保する設計
With Me.txtMain
.Width = formWidth – 200
.Height = formHeight – 800 ‘ 下部にボタンがある想定で高さを調整
End With
‘ [btnSave] というボタンを常に右下に配置する例
With Me.btnSave
.Left = formWidth – .Width – 200
.Top = formHeight – .Height – 200
End With
End Sub
コードの重要ポイント解説
- InsideWidth / InsideHeight: フォームの「表示領域」のサイズです。スクロールバーやウィンドウ枠を除いた純粋な作業領域を指します。ここを基準にするのが鉄則です。
- On Error Resume Next: フォームが最小化された時など、負の数値が発生してレイアウト計算がエラーになることがあります。これを回避する「現場の知恵」です。
- Twip(トウィップ)単位: Accessの座標は「Twip」という単位です。1インチ=1440Twip。この単位系を知っておくと、微調整が格段に楽になります。
—
3. レスポンシブ設計で「やってはいけない」こと
現場でよくある失敗パターンを3つ挙げます。これさえ回避すれば、あなたのコードは非常に安定します。
1. 計算の過多: `Form_Resize`はウィンドウをドラッグしている間、1秒間に数十回発生します。重い処理(データベースへの再クエリなど)をこの中に書くと、Accessがフリーズします。あくまで「数値の代入」のみに徹してください。
2. 基準の曖昧さ: コントロール同士の位置関係を複雑に連鎖させると、どこかで計算が破綻します。「フォームの端を基準にする」のが最も堅牢で管理しやすい方法です。
3. 最小サイズの無視: ユーザーがウィンドウを極端に小さくしたとき、コントロールが重なったり隠れたりしないよう、最小サイズを設ける検討も必要です。
—
4. チーフアーキテクトからのアドバイス
「マクロの記録」を卒業し、こうしてVBAで直接UIを制御するようになると、Accessという道具の見え方が変わります。
最初は難しく感じるかもしれませんが、「画面は単なる四角い枠であり、中の要素はすべて数値で制御できる」という事実に気づいたとき、あなたはもう「初学者」ではありません。
まずは、一つのボタンをウィンドウの右下に固定するところから始めてみてください。それが、あなたの開発者としての新しい冒険の第一歩です。
何か詰まったら、いつでも聞いてください。Accessの世界は、知れば知るほど面白いですよ。応援しています!
