- ベストアンサー
userformの表示位置について
userformを表示し、 マウスで位置を動かし、その位置を調べてプロパティ(top,left)を変更しています。 そしていったんunloadして、再度表示すると、 変更したプロパティが最初に戻ってしまっています。 コレはどうすることも出来ないのでしょうか。 移動させた位置を別保存し、 次回のshow時にそれを読み込むことでは解決できますが、 プロパティーを変更したときの値を保存しておく(初期化させない)ことがやりたいのですが。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
QueryCloseイベントを使いユーザー フォームが閉じる前に 位置を変数に格納してやれば Public myLeft As Single Public myTop As Single 標準モジュール Sub ユーザーフォーム表示() With UserForm1 If myLeft = 0 Or myTop = 0 Then .StartUpPosition = 1 Else .StartUpPosition = 0 .Left = myLeft .Top = myTop End If .Show End With End Sub ユーザーフォームモジュール Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) myLeft = Me.Left myTop = Me.Top End Sub
お礼
早速有り難うございます。 言葉足らずで失礼しました。 >そしていったんunloadして、再度表示すると、 とは、「ブックを閉じて」ということです。 ブックを閉じずにshowを繰り返す場合は問題なく位置が動いて表示されます。 ブックをいったん閉じてしまうとブックを保存しても元に戻ってしまう、 ということです。 お教えいただいたやり方は、 >移動させた位置を別保存し、 >次回のshow時にそれを読み込むことでは解決できますが、 で書いたことです。 プロパティが変更されているのに保存しても初期値に戻るということは、 プロパティの保存が出来ないということなのでしょうか。 プロパティの保存が出来れば解決すると思うのですが。
補足
H/Pを探していて回答を見つけました。 「.FRX」なるファイルが存在するみたいです。 コレが、手動で変更されたプロパティを保存すると。 ということで、excelvbaで設定された内容は無理みたいですね。 中身を調べて、このファイルをいじってやれば出来なくはないでしょうが、 それなら私が現在やっている方法と同じだし、もっと複雑になりますので。 ということで諦めました。 お世話になりました。