トップ > 逆引きで学ぶ ユーザーフォーム&コントロール > 1-5 フォームの表示位置を設定する

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アプリケーションの左上隅に合わせてフォームを表示

【UserForm1】
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]の位置に合わせてフォームを表示

【UserForm1】
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

ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.