ここでは、VBA でユーザーフォームの表示位置の設定について掲載しています。あとは多少の愚痴 ( こちらがメイン ) とです。
スポンサーリンク
ユーザーフォームの表示位置の設定
ユーザーフォームの表示位置は次の 4つから選ぶことができます。
設定 | 値 | 説明 |
---|---|---|
Manual | 0 | 初期設定値を指定しません。 |
CenterOwner | 1 | UserForm が属する項目の中央。 |
CenterScreen | 2 | 画面全体の中央。 |
WindowsDefault | 3 | 画面の左上隅。 |
今回は自分で表示位置を設定するために、Manual を選択しています。プログラムからも Visual Basic Editor のプロパティウィンドウからでも設定することができます。
肝心のユーザーフォームの出力位置は Top および Left プロパティで設定できます。
UserForm.Top = 50 ' 画面の上から 50 ピクセル UserForm.Left = 50 ' 画面の左から 50 ピクセル
簡単な記述で設定できることがわかります。ただし気をつけておきたいのは、マイナス値を設定すると画面からはじき出されます。逆手にとって隠しておいて、あるきっかけでフェードインなんて UI も良いかもしれません。
そろそろ愚痴モードに突入しそうですが、マルチディスプレイ環境では、2台目のディスプレイにいる状態で、UserForm.Top / UserForm.Left プロパティを確認するとマイナス値になっていることがあるようです。実際に確認したわけではありませんが、十分考えられるかと思います。
最後のフォーム位置を保存・復元する
最終的なフォーム位置やサイズを保存しておいて、次回j起動時にその位置が記録されているアプリケーションは見たことがあると思います。メモ帳だったりブラウザでもそんな機能はあります。
愚痴モードに突入します。
利用者が共有して利用している INI ファイルにフォームの最終位置を保存するな
そもそも、1つのエクセルファイルを共有サーバ上で各々が開いているアプリケーションというのもツッコミたくなりましたが、それは我慢します。なんで、INI ファイルにフォームの最終位置を保存するのは理解できません。最終利用者の表示位置が次の利用者の表示位置となります。それなら常に同じところに出力されたほうがましです。
そして、マルチディスプレイ環境の利用者が利用したあとは、マイナス値が保存されています。マルチディスプレイ環境ではない多数の利用者はフォームが画面の外に表示されます。つまり利用不可と同じことです。
今回の対応では、INI ファイルのマイナス値を手作業で修正しただけです。なので、きっとまた再発します。本対応ではこの機能をばっさり削ぎ落とすつもりです。小さな親切 大きなお世話 とはいいますが、今回は残念ながら親切ではありません。
何?この仕様?アホなの?