これが八木くんの実力!
UserFormを閉じるとき表示されていた位置をレジストリに記録し、次回UserFormを表示するときに
前回と同じ位置に表示します。
Private Sub UserForm_Initialize()
Dim pos As Long
StartUpPosition = 0
pos = Val(GetSetting("MyMacro", "Form", "Top", "100"))
Me.Top = pos
pos = Val(GetSetting("MyMacro", "Form", "Left", "100"))
Me.Left = pos
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
SaveSetting "MyMacro", "Form", "Top", Top
SaveSetting "MyMacro", "Form", "Left", Left
End Sub
< スタンダード公式テキスト P207 >
「これって、終了時のユーザーフォームのTopとLeftプロパティをレジストリに保存して、
次に開いたときに利用するんですよね。
これだと毎回フォームを開いたら、TopとLeftを100の位置にしちゃうんで、
意味がないんじゃないですか?」
「どれどれ…。ああ…この100は、GetSetting関数の既定値だよ。
初めてフォームを開くとき、レジストリには何もデータがないから空の文字列が返る。
そのとき既定値で、100を設定してあげてるんだ。
このフォームを閉じると、SaveSettingステートメントで閉じたときの位置が記録されるから、
次に表示するときは100ではなく、保存された値が利用されるよ」
「…なるほど………既定値か。
でも…そもそも、レジストリにデータを保存する意味なんてあるんですか?
値を記録するセルを用意して、そこにデータを保存すれば、それで事足りるんじゃないんですか?」
いぶかしげな表情で、岬さんが八木くんに問いかけます。
「いい質問だね。
確かに、セルに値を保存して、それを利用することもできる。
でも、VBAのアプリケーションは、ユーザーの要望に応えてバージョンアップしていくものだろう?
セルに保存したデータはそのブックだけのもので、新しいバージョンを配布したら、
何らかの方法で移行してやる必要がある。
でもレジストリなら、その人の使っているPCに記録されるから、ブックが新しくなっても、
以前のデータをそのまま利用できるというメリットがあるよ」
説明を続ける八木くんの顔を、ジッと見つめる岬さんの頬がポッと赤くなります。
「(…やだ…。このタラコ、ちょっとカッコいい…)」