個人用ビュー削除

 え、そんなことあるの?
 ファイルサーバーに置いたMS-Excelファイルで、なぜか特定のシートが見られないということがランダムに発生しているらしい。共有を外すと問題がなくなると経験的にわかっているので、そういう対処をしていたようだが、ちょっと怖い。
 Webで「excel & 共有 シートが見えない」で検索。「共有ブックの表示が他のPCでおかしいときにやってみる…」というのがヒット。なるほど、ブックの共有を設定すると、個人用のビューが保存されるのが原因なわけね。(すなおに「バグ」と言ってくれればいいのだが。)

 ためしに自分が管理しているファイルの「ユーザー設定のビュー」をみると、転出した人のものを含めて百個単位。そういうものなのか、これはいかんわ。消そうとしたが「1個ずつしか消えない」。当然「自動化できないかな」。「Excel VBA ユーザー設定のビュー 削除」あたりで検索したが埒が明かん。仕方ないのでマクロの自動記録でビューの削除をやってみたところ、

ActiveWorkbook.CustomViews("個人用ビュー名").Delete
が記録された。なるほどCustomViewsがキーワードですね。
 なーんかできそうな気がしてきたのでVBE(マクロを書くエディタです)で編集開始。
 ActiveWorkbook.CustomViews. とピリオドまで打ったところで[Count]というプロパティが出てくることに気が付く。PF8でステップ実行すると、ああ、数が拾える。
 ということは、"個人用ビュー名"の代わりに、一連番号入れてやると個人用ビューは消えるんじゃないかな?適当なブックでやってみる。ああ、消える消える。
 というわけでさらっとForループ分を書いて、Viewの一連番号は0ではなくて1から始まるのもデバッガで判別して、できた。
 が、なんか消し切れずに残ったりする。
 ならばと「VBA & CustomViews」を検索してみたのだがよくわからん。
 デバッガでステップ実行するときちんと消えるので、タイミングの問題らしいということは分かった。そこで適当にウェイトを入れたりしたのだが、それでも残る。

 ここで発揮されるのが「プロ意識」。10分も20分もかかる作業じゃないのだから、消えるまで、つまり
ActiveWorkbook.CustomViews.Count
がゼロになるまでDoループで回してやればよい。(次のループに入る直前に0.1秒程度のウェイトを入れといた。)
 思ったよりも時間はかかったが(何周したかわからんが)きちんと消えた。

 原因がはっきりしないので、みなさん使ってみて!と触れ回るわけにはいかないが、問題が起こった時のために、手持ちしておくなら悪くない。

フリーソフト開発秘話、目次
ホーム