- 締切済み
EXCEL2010でxltmにxlsmは必要?
EXCEL2010を使用して、ユーザーフォームを含むマクロを作成しました。それをマクロ有効ブック(以降xlsm)として保存した上で、グループ内で共有する為にマクロ有効テンプレート(以降xltm)で保存しました。またユーザーリボンとしてもこのマクロを登録しました。xlsmはもう不要と考え、別のフォルダーに移動させました。 次に、同一PCでマクロを使いたいEXCELデータ(.xlsx)を読み込んだ上で、登録したリボンを叩いたところ、該当xlsmがないというメッセージが出てマクロが実行できません。該当xlsmを移動前の場所に戻すと、リボン(xltm)が使えるようになります。 これでは、マクロを共有するのに大変不便です。xltmファイルにはマクロがすでに書いてあるので、xlsmはもう不要なはず。 どうすればxltmだけで実行できるのでしょうか? xltmを利用する上でxlsmが必要なのですか?またはxlsm内にxlsmのパスを書いておく必要があるのですか? お分かりになる方がいらっしゃったら回答をいただければ幸いです。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 先ほど、テンプレートで実際に試してみました。 こちらは、何の問題も出てきませんでしたが、ローカル(オブジェクト)・モジュールと標準モジュールという違いは分かりますか? マクロの中に、その[xlsm]のマクロを呼び出すように作られているために、 >該当xlsmを移動前の場所に戻すと、リボン(xltm)が使えるようになります。 このようなことになります。ローカル(シート、UserForm)の中で作られたものは、問題なく、新しいシートが生成されます。つまり、テンプレートというのは、原型ですから、それそのものが実行するわけではありません。テンプレートを実体化させて、始めて、シート全体が生きてきます。 しかし、標準モジュールで書いた固有のマクロを呼び出すマクロを書けば、当然、呼び出されるようになってしまいます。それは、新たなオブジェクトとして生成されません。具体的には、フォーム・ボタンなどで書いたものは、元のワークブックを呼び出してしまいます。 だから、そうしたマクロは、アクティブXコントロールに書き換えなくてはなりません。 それが難しいようでしたら、アドインを作って、呼び出さないといけなくなると思います。 質問のタイトルの「EXCEL2010でxltmにxlsmは必要? 」は、必要ないようなオブジェクトを設定すれば、呼び出しは不要になります。
お礼
WindFaller様、 確認までしていただきご丁寧にありがとうございました。 標準モジュールに書いてはいけないということですか・・・またローカルモジュールと標準モジュールの違いも理解していませんでした。 (1)ローカルモジュールとはProject Explorer内のMicosoft Excel Objects であると理解しました。 (2)ということは、マクロを生成し自動記録させるケースでも、その場所は自動的に標準モジュールになるので、そのようにして書いたマクロはすべて配布する際には"*.xlsm" も同梱しておき、受け取ったユーザー側で"*.xlsm"を使って"*.xltm"を登録する必要があるのですね。 (3)こういう場合、標準モジュールに書かれたマクロをMicosoft Excel Objectsにある、例えばSheet1にコードを移せば、配布しても今回のような問題は起きないということですね? 私は"*.xltm"内にユーザーフォーム、標準モジュールすべてが書き込まれるものと理解していました。 一度試してみようと思います。ありがとうございました。