Access だとアドイン自体もデータベースなので、ふつうにアドイン自体に保存できる。じゃあ Excel はワークシートに保存すれば良いのか、と思ったのだけれど、いろいろな意味でちょっとハマった。
まず実装面で、こんな風に書いてテストしてみた。
Private Sub CustomCommand_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox ThisWorkbook.Worksheets("Sheet1").[A1] ThisWorkbook.Worksheets("Sheet1").[A1] = Now() End Subところが、これでは Excel を再起動しても値が残っていない。
Private Sub CustomCommand_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox ThisWorkbook.Worksheets("Sheet1").[A1] ThisWorkbook.Worksheets("Sheet1").[A1] = Now() ThisWorkbook.Save '<- 保存を忘れずに! End Subこれで値が残るようになった。
Access は特に何もしなくても、閉じる時にデータが自動保存されていたので、何となく同じ感覚でいたら大違いでした。
実装面はこれで良しとするとして。
設計面の問題。
Windows 7 では、アドインは以下に保存される (変更もできるけれど、混乱の元なので変更しないという前提)。
C:\Users\UserName\AppData\Roaming\Microsoft\AddInsデータをアドイン自体に持たせると、当然 Roaming 扱いになる。でも、そうすると端末依存のデータを保存しにくい。設計思想的には、端末依存のデータは Local ディレクトリの方に持たせるのが自然な気がする。
不幸なことに (?)、いま作成しているアドインは開いているブックのパスを保存する必要がありそうな感じがしている(例によって仕様がコロコロ変わるので、最終的にどうなるか不明なのだけれど)。そんなパス情報は、Roaming に保存しても、端末が変わったら、おそらく意味が無い。
じゃあデータだけ Local ディレクトリに保存すればよいのか。
でもアドインとデータを別管理するのは、単純に面倒くさい。アンインストール時にデータ ファイルも削除するかどうかユーザーに確認するような処理入れなきゃいけないし。
レジストリは、もちろん光速で却下。
こういうときはこうするといいよ、みたいな指標って、Excel パワーユーザーさん界隈で合意がされてるんだろうか。
自分はとりあえず、愚痴をたれながら Local ディレクトリに MDB 置こうかと思っているけれど。
実体験がない者のコメントで申し訳ないのですけど、
返信削除> Local ディレクトリに MDB 置こうかと思っている
賛成(・∀・)