トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 揺るぎない力編: 第8話「八木くんの実力!」4/4 :これが八木くんの実力!

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第8話 「八木くんの実力!」

これが八木くんの実力!

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に記録されるから、ブックが新しくなっても、
以前のデータをそのまま利用できるというメリットがあるよ」
説明を続ける八木くんの顔を、ジッと見つめる岬さんの頬がポッと赤くなります。

「(…やだ…。このタラコ、ちょっとカッコいい…)」

第9話「八木くんの夢」に続きます
文・イラスト / 武藤 玄
ご意見やご感想の投稿はこちら

一覧にもどる