前回の表示位置を再現する
同じブックを開いている間、閉じたときのフォーム位置を標準モジュールの変数に記憶し、次回の表示位置へ戻します。
実行前に確認
- 位置を覚えるのはこのブックの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図で見る位置を覚えて再表示
イメージ図同じブックを開いている間、閉じたときのフォーム位置を標準モジュールの変数に記憶し、次回の表示位置へ戻します。
閉じる前
×のQueryCloseでHideして呼び出し元へ
位置を保持
Left・Topを変数へ保存してUnload
次回表示
Manualで記憶した座標へ配置
各操作は、このガイドに指定されたフォームのコードで行います。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。
- 2
コントロールは不要です。「貼付先1」をUserForm1のコードへ、「貼付先2」を標準モジュールへ分けて貼ります。
- 3
標準モジュールのOpenRememberedFormを実行し、タイトルバーをドラッグして位置を変えてから×を押します。
- 4
同じOpenRememberedFormをもう一度実行します。移動後の位置に戻ることを確認します。
- 5
初期位置へ戻したいときはResetRememberedPositionを実行してからOpenRememberedFormを実行します。