← コード一覧へ戻る
実務UserForm

前回の表示位置を再現する

同じブックを開いている間、閉じたときのフォーム位置を標準モジュールの変数に記憶し、次回の表示位置へ戻します。

実行前に確認

  • 位置を覚えるのはこのブックのVBA変数が生きている間だけです。ブックを閉じたりVBEでリセットしたりすると失われ、ファイルやレジストリには保存しません。
  • モニター構成を変えてフォームが見えなくなった場合は、ResetRememberedPositionを実行してから開き直します。
  • 必ずOpenRememberedFormから開きます。フォーム単体をF5で開くと、×でHideした後のUnload処理がありません。
  • コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。

1サンプルコード

'【貼付先1:UserForm1 のコードモジュール】
Option Explicit

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        Me.Hide
    End If
End Sub

'【貼付先2:標準モジュール。ここから下は別の場所へ】
Option Explicit

Private mHasPosition As Boolean
Private mLeft As Single
Private mTop As Single

Public Sub OpenRememberedForm()
    Dim frm As UserForm1
    Set frm = New UserForm1
    Load frm
    If mHasPosition Then
        frm.StartUpPosition = 0
        frm.Left = mLeft
        frm.Top = mTop
    Else
        frm.StartUpPosition = 1
    End If
    frm.Show vbModal
    mLeft = frm.Left
    mTop = frm.Top
    mHasPosition = True
    Unload frm
    Set frm = Nothing
End Sub

Public Sub ResetRememberedPosition()
    mHasPosition = False
End Sub

図で見る位置を覚えて再表示

イメージ図

同じブックを開いている間、閉じたときのフォーム位置を標準モジュールの変数に記憶し、次回の表示位置へ戻します。

  1. 閉じる前

    ×のQueryCloseでHideして呼び出し元へ

  2. 位置を保持

    Left・Topを変数へ保存してUnload

  3. 次回表示

    Manualで記憶した座標へ配置

各操作は、このガイドに指定されたフォームのコードで行います。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。

  2. 2

    コントロールは不要です。「貼付先1」をUserForm1のコードへ、「貼付先2」を標準モジュールへ分けて貼ります。

  3. 3

    標準モジュールのOpenRememberedFormを実行し、タイトルバーをドラッグして位置を変えてから×を押します。

  4. 4

    同じOpenRememberedFormをもう一度実行します。移動後の位置に戻ることを確認します。

  5. 5

    初期位置へ戻したいときはResetRememberedPositionを実行してからOpenRememberedFormを実行します。

使っている機能の公式ドキュメント(Microsoft Learn)