プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、マクロをすべてのブックに適用する
結論から書けば、マクロを書いたブックを用意して
メニューの「表示」の中に(多分)ある「表示しない」を押して

PERSONAL.XLSB(もしくはPERSONAL.XLS)

の名前で

C:\Users\【ユーザ名】\AppData\Roaming\Microsoft\Excel\XLSTART

に保存すればOKです。
PERSONAL.XLSB(もしくはPERSONAL.XLS)の中のマクロがすべてのブックに反映されます。

きっかけは

ExcelVBA、ブックを閉じるときに自動的に上書き保存する

の記事でした。

ブックを自動保存するマクロを作ったのですが、いちいち個別のブックに埋め込むのは面倒でですね。
すべてのブックに一括で反映したかったのです。

そんなことできるのかな~(--?と思ったのですが、できました。

まずは

PERSONAL.XLSB

もしくは

PERSONAL.XLS

という名前のExcelファイルを用意します。
※以降「PERSONAL.XLSB」として説明しますが「PERSONAL.XLS」も同じです。

次に、PERSONAL.XLSBの中にお好きなマクロを記述します。

その後、Excelメニューの「表示」の中に(多分)ある「表示しない」を押して
シートを非表示にしちゃいます。

あとは保存して

C:\Users\【ユーザ名】\AppData\Roaming\Microsoft\Excel\XLSTART

に放り込みます。

そうすると、このPERSONAL.XLSBに埋め込んだマクロがすべてのブックに反映されるのです。

ちなみにPERSONAL.XLSBに保存するマクロ内で「ThisWorkbook」を使っている場合はご注意ください。
「ThisWorkbook」は「PERSONAL.XLSB」を指します。

例えばブックを閉じるときに強制的に上書き保存する

Sub Auto_Close()
    If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
    End If
End Sub

なコードを埋め込んだとします。

普通のブックに埋め込むときはこれでOKです。

ですがPERSONAL.XLSBに埋め込むときは、このままでは期待通りの動作をしません。
「ThisWorkbook」を「ActiveWorkbook」に変えて

Sub Auto_Close()
    If ActiveWorkbook.Saved = False Then
        ActiveWorkbook.Save
    End If
End Sub

のようにしてあげる必要があります。

ExcelVBA、ブックを閉じるときに自動的に上書き保存する

の記事からの繋がりで書いたので「ThisWorkbook」を例に出しましたが、
他にも同じようなのが恐らくあるでしょう。

マクロをPERSONAL.XLSBに移植する際は動作確認を頑張ってくださいね。

ってなところで、マクロをすべてのブックに適用するやり方の説明、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事