「StartUpPosition」プロパティは、UserFormが表示される初期位置の設定です
基本的には初期表示位置なのでデザインウィンドウで設定します
「0 – 手動」は、初期位置を設定しません。この場合LeftプロパティとTopプロパティの設定値により表示位置が調整されます。それらのプロパティを使用して任意の位置に表示するにはこの設定にしておく必要があります
「1 – オーナーフォームの中央」は、Excelのウィンドウの中央に表示されます。Excelの位置によって表示位置が変更されます。マルチディスプレイで表示する場合に便利な設定です
「2 – 画面の中央」は、そのままの意味で画面の中央に表示します
「3 – Windows の既定値」は、画面の左上にぴったりくっついた場所に表示されます。Leftプロパティなどで位置調整を行っていない「手動」と同じ場所に表示されますので、あまり使いません
また、Leftプロパティなどを設定していても左上の表示位置は変わりません
この画像が、各設定で表示される場所です
ピンクがフォームで、設定により場所が変わります
緑色がExcelのウィンドウです、UserFormのオーナーは基本Excelなのでその中央になるので、Excelの位置によって変化します
グレーが画面全体のウィンドウです、その中央に画面の中央に設定したフォームです
初期設定では、この位置設定になっています
コードで変更する場合
Private Sub UserForm_Initialize() 'フォームの初期表示を手動で表示する Me.StartUpPosition = 0 End Sub
上記のコードを使用すれば、表示位置を変更して表示させられます
ですが上記にもあるように、初期表示位置なのであまり動的に変更する場面が少ないと思いますのでここで解説します
このプロパティは、初期表示位置なので表示されてから設定を変更しても意味はありませんので、表示前に設定を変更する必要があります
なので、メモリ上に読み込まれて表示前に発生するInitializeイベントに記載します
またリファレンスにもあるような、メモリ上に読み込みをしてプロパティを変更してから表示させる方法もあります
ただ、このコードの注意点として手動とWindowsの既定値の設定が切り替わりません
自分の環境のExcel2010でしか試していませんが、デザイン画面で手動にして、コードでWindowsの既定値の設定にしても手動のままです
逆も同様でした、それ以外の設定には切り替わります
まあ、使用場面の少なさからあまり影響は無いと思いますが・・・
画面の表示位置について
画面の表示位置とは、案外重要な要素です
入力補助などのフォームで、フォームの起動を繰り返すような場合に毎回表示位置をタイトルバーをドラッグして移動させるのは面倒です
特にマルチディスプレイを使用している場合に、毎回メインからサブへ移動させるというような動きは非常に面倒です
なので、最終的に完成したときにはこのプロパティから表示位置を調整するようにします
なお、表示位置を保存して前回と同じ場所に表示する処理は以下の記事で解説しています