VBA UserForm の表示位置を指定する方法

スポンサーリンク

UserForm を作成してデフォルトのまま起動すると、表示位置はExcelブックのウィンドウ中央に表示されます。これが既定の位置ということです。でも、規定があるということは規定以外の位置設定もできるということです。以下、その方法を紹介します。

くるみこ
くるみこ

UserForm」の表示位置はプロパティで指定できるんですよ。せっかく利用するのですから、使いやすい位置にきちんと表示させたいものですね。というわけで、今回は表示位置の設定方法ついて勉強しましょう(^^)/

Excelの位置によっては UserForm が変な位置に表示されるので、すごく気になっていました(^^; やっぱり使いやすい位置に表示させたいですよね。是非よろしくお願いしますm(__)m

【この記事でわかること
UserForm 表示位置の指定方法がわかります
・表示位置の設定をシートを使って保存する方法がわかります

・前回と同じ位置に表示させる方法がわかります

前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

くるみこ
くるみこ

前回記事は UserForm を表示する方法と閉じる方法。終了時に発生するイベントと「×」で閉じないようにする方法などを解説しています。この記事と関連しているので是非あわせて覗いてみてね(^^)/

スポンサーリンク

表示位置は StartUpPositionプロパティで設定します

StartUpPositionプロパティは、UserForm が最初に表示される位置の指定です。
StartUpPositionプロパティで下記の設定が可能です。

設定値表示位置動作等の説明
0手動VBAでLeftTopのプロパティをポイント単位で指定します
※指定しなかった場合は「3」と同じ(画面左上)になります
1オーナーフォームの中央UserFormの親フォーム中央(ここではExcelの中央)です
2画面の中央デスクトップの中央ということです
3Windowsの既定値画面(デスクトップ)の左上隅に表示されます

LeftプロパティはUserFormの左位置、TopプロパティはUserFormの上位置です。

VBAで起動時に表示位置を指定する方法

・プロパティで指定する方法とプロパティの「手動」を設定する方法があります。

VBAを使ってプロパティで指定する方法

・起動時の初期イベント UserForm_InitializeStartUpPositionプロパティを指定します。

Private Sub UserForm_Initialize()
  StartUpPosition = 0 '手動
  Me.Left = 100
  Me.Top = 100

  'startupposition = 1 'Excelの中央
  'startupposition = 2 '画面の中央
  'startupposition = 3 '画面の左上
End Sub

・プロパティーの指定は一つだけです。位置を固定するならばここに書くだけでOKです。
・「0 – 手動」の場合は、LeftTop を設定します。
・上の例では使うものだけ残して、使わない設定はコードをコメントアウトします。

セルの指定データを使って設定する方法

・シートのセルの値を利用して表示を設定する場合は次のようにします。

'セルから位置設定取得
Private Sub UserForm_Initialize()
  Dim pos As Long
  pos = Range("B1")
  '手動指定の場合は処理を分岐します
  If pos = 0 then
    StartUpPosition = 0 '手動指定
    Me.Left = Range("B2").Value
    Me.Top = Range("B3").Value
  Else
    StartUpPosition = pos '表示位置指定
  End If
End Sub

StartUpPositionプロパティを「B1」セルで指定します。
・手動「0」を指定した場合は、Leftを「B2」Topを「B3」セルで指定します。
・11行目、手動以外の場合は、StartUpPosition = pos で「B1」の値を代入指定します。

前回と同じ位置に表示させる方法

・この場合は「StartUpPosition = 0」として手動設定を指定する必要があります。
・最初の起動時は位置を指定しなくてもOK。好みの位置に UserForm を動かしてください。

セルに現在の表示位置を記録するコード

・コードの記載場所は、UserForm_QueryCloseイベントです。
UserForm_QueryCloseUserForm が閉じられようとする直前で発生するイベントです。
・自身の表示位置(LeftTop)をセルに書き込んで残しておく方法を使います。(その他、レジストリに保存するなどの方法もありますがここでは安全のため使用しません)

'セルに位置設定を保存します
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Range("B2") = Me.Left
    Range("B3") = Me.Top
End Sub

セルに書き込んだデータは、ブックを上書き保存しておく必要があります

セルから取得た位置に表示させるコード

・次回の起動時には、セルに保存した位置データを取得して各プロパティに代入します。

'セルから位置設定取得します
Private Sub UserForm_Initialize()
    StartUpPosition = 0  '手動
    Me.Left = Range("B2").Value
    Me.Top = Range("B3").Value
End Sub

・ワークシートのセルの値によって起動させるかどうかを設定している例です。
・Range(“A12”) = 1 ならば UserForm を起動します。

UserForm の表示位置を指定する方法は以上で終了します。

スポンサーリンク

まとめ(おわりに)

・いかがでしたでしょうか?
・記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
登録しているサンプルは前回記事のものに追加して流用しています。ご了承ください!
今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

UserForm の表示位置を指定する方法を勉強しました。前回と同じ位置に表示させる方法は、好みの位置に表示できるので是非使いたい手法ですね(^^)

シートのセルに設定を保存するから、Excelを終了する際には必ず保存しておかないと次回起動時に同じ位置に表示できないということなんですね(^^ゞ

【今回わかったことは】
UserForm 表示位置の指定は StartUpPositionプロパティで指定します
・「手動」の場合は、LeftTopで位置を指定します
・前回と同じ位置に表示させる方法がわかりました

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/

記事のサンプルファイルをダウンロードできます

今回の記事のサンプルをダウンロードできるようにしています!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください