1-5 フォームの表示位置を設定するユーザーフォーム 2021.11.16
次の書籍の第1章~5章を公開しています。
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」
ユーザーフォームを起ち上げると、デフォルトではオーナーフォームの中央に表示されます。
オーナーフォームとは、Excel VBAでは、Excelアプリケーションのウィンドウを指します。
この表示の位置設定に関するプロパティは、StartUpPositionになります。
StartUpPositionプロパティに設定できる値は次の4つです。
・0-手動
・1-オーナーフォームの中央(既定)
・2-画面の中央
・3-Windowsの既定値
フォームが表示される位置を指定するには、このプロパティの設定を「0-手動」にし、フォームのTopプロパティ/Leftプロパティを設定します。
予めプロパティウィンドウでStartUpPositionプロパティを「0-手動」に設定しておくと、コード内ではTop/Leftプロパティの記述のみになります。
設定していない場合は、コード内でStartUpPositionプロパティを設定します。
Excelアプリケーションの左上隅に合わせてフォームを表示
Private Sub UserForm_Initialize() With Me .StartUpPosition = 0 .Left = Application.Left .Top = Application.Top End With End Sub
Sub Form_Show_Modal() UserForm1.Show End Sub
セル[B3]の位置に合わせてフォームを表示
Private Sub UserForm_Initialize() Dim dblX As Double, dblY As Double With ActiveWindow dblX = .PointsToScreenPixelsX(0) / 96 * 72 + Range("B3").Left * .Zoom / 100 dblY = .PointsToScreenPixelsY(0) / 96 * 72 + Range("B3").Top * .Zoom / 100 End With With Me .StartUpPosition = 0 .Left = dblX .Top = dblY End With End Sub
Sub Form_Show_Modal() UserForm1.Show vbModal End Sub
※ セルの位置は表示倍率によって変わるため、Top/Leftプロパティにウィンドウの表示倍率を掛けています。
【補足情報】ポイントとピクセル
位置や幅に関する単位にはポイント(Points)とピクセル(Pixels)があります。
ポイントとピクセルの関係は「96ポイント=72ピクセル」となります。
ActiveWindow.PointsToScreenPixelsX/Yメソッドは、アクティブウィンドウのスクリーン座標をピクセルで取得します。それをポイント単位に戻すために、96で割って72を掛けています。
ActiveWindow.PointsToScreenPixelsX/Yの座標の基準は、セル[A1]の左上隅にあたります。
[ MSDN Window.PointsToScreenPixelsX メソッド (Excel) ]
書籍紹介140以上のサンプルファイル付き!
知りたいがすぐわかる! やりたいがすぐできる!
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」(Kindle版)
ユーザーフォームを扱えると、VBAでできることが大きく広がります!
本書では、知りたいこと、やりたいことから、逆引きで学びを深められます。
■ 購入:amazon