和風スパゲティのレシピ

日本語でコーディングするExcelVBA

ブックを非表示にして保存して閉じるマクロ

ブックを非表示にして保存して閉じるマクロを紹介します。


非表示のブックを作成するときに困るのが、「非表示状態で保存したい」のに、
「非表示ブックはExcel上では保存して閉じる方法がない」んですよね。

一応すべてのブックを閉じれば、最後に「保存しますか?」と聞いてくれるので、
もしかしたらこれを活用している人もいるかもしれません。


これをVBAで解決する方法としてはまず、
イミディエイトウィンドウを活用するのが楽です。


対象のブックを非表示にした後、そのブック内のモジュールをアクティブにした上で、
イミディエイトウィンドウにて「Thisworkbook.Close True」を実行します。

これで「非表示ブックを上書き保存して閉じる」ことができます。


さて、この解決策でも「ブックをすべて閉じる」よりははるかに楽なのですが、
非表示ブックを扱う機会が多い方は、Excel上にボタンを作ってしまいましょう。


まずは「アクティブブックを非表示にしてから保存して閉じる」マクロがこちら。

Sub アクティブブックを非表示にして保存して閉じる()
    With ActiveWorkbook
        
        Windows(.Name).Visible = False
        .Close True
        
    End With
End Sub

Withステートメントを使用していますが、
これはActiveWorkbook.Close Trueでは違うブックが閉じられてしまうためです。
(もちろん2回書かなくて済むというのもありますが)


あとはこのマクロを「個人用マクロブック」などに書き、
クイックアクセスツールバーやリボンに登録しておきましょう。

ブックの編集後、即保存して閉じれるようになって便利です。


詳しくはこちらをどうぞ
www.limecode.jp

非表示ブックの活用

そもそもなぜ非表示ブックを使うのかについても解説しておきます。


マクロを作成していると、ユーザーに触らせたくないブックを扱うことがあります。
プログラム専用ブックや、裏で参照するマスタや簡易DB
マクロの設定値を保存しておくブックなどですね。

これらのブックは非表示にしておくと、誤編集もされづらく、
ユーザーを混乱させることも減って一石二鳥です。


一見「非表示シート」でも同じことができそうですが、
これらを「別ブック」にしておくことの最大の利点は、
そのブックをSharePointや共有サーバーに置くことで、
全員が同じブックを見るマクロを作れる
ことです。


これにより、マクロの修正を1ブックを編集するだけで終わらせることができるようになります。


例えば共有サーバーの「商品マスタ」を読み取り専用で開き、
商品名はそこから取得するような処理を書けば、
配布するマクロに商品名取得用のシートを搭載したり、
その更新を「マクロの再配布」でやる必要がなくなるということですね。

多くのユーザーに配布するマクロを作る際は、
必須のテクニックといってもいいかもしれません。


実際に書く処理自体はとても簡単ですので、
配布マクロを作成する方は、ぜひとも覚えておいてください。