Callを使用してVBAマクロを実行する(Microsoft Word)
前のヒントで示したアプローチを使用して別のマクロからVBAマクロを実行することは可能ですが、そのようなアプローチではうまくいかない場合があります。代わりに、マクロを実行するフェイルセーフな方法を可能にするソリューションを探す必要があります。 1つのアプローチは、VBAでCallコマンドを使用することです。ただし、コマンドを使用する前に、呼び出し元のプロジェクトにプロジェクト参照を追加する必要があります。 (プロジェクトは、VBAがテンプレート内のVBAモジュール、フォームなどのコレクションを参照する方法です。たとえば、VBAは標準テンプレートを「通常」プロジェクトとして参照します
プロジェクト間の参照は、明確に定義されたものを提供します呼び出し元のプロジェクトと呼び出されるプロジェクトの間のリンク。
たとえば、MyMacroマクロ(実行したいマクロ)がCoolDocテンプレートの一部であったとしましょう。 VBAでCallを正しく使用するには、MyMacroを呼び出すマクロにCoolDoc.dotmプロジェクトへの参照を追加する必要があります。残念ながら、これはVBAに潜在的な「落とし穴」があるため、言うよりも少し簡単です。「通常」以外
プロジェクトの場合、VBAは、ユーザーが作成したすべてのテンプレートプロジェクトにデフォルトのプロジェクト名「TemplateProject」を付けます。実行するマクロを具体的に指定する場合は、一意のプロジェクト名を使用するのが最適であるため、これにより問題が発生する可能性があります。 CoolDoc.dotmに一意のプロジェクト名を付けるには、次の手順に従います。
。 CoolDoc.dotmテンプレートが開いていることを確認してください。
。 Alt + F11を押して、VBAエディターを表示します。
。 VBAエディターの左上にある[プロジェクト]ウィンドウで、テンプレートのフォルダーを右クリックします。 CoolDocはテンプレートであるため、フォルダーの名前はTemplateProject(CoolDoc)です。 Wordはコンテキストメニューを表示します。
。コンテキストメニューから「テンプレートプロジェクトのプロパティ」オプションを選択します。
[プロパティ]ダイアログボックスが表示されます。
。 [プロジェクト名]フィールドに、プロジェクトに適した名前を入力します。
(CoolDocは、一意である限り、適切な名前になります。)
。 [OK]をクリックします。ダイアログボックスが消え、プロジェクトの名前がCoolDocに変更されます。
CoolDocの下のすべてのオブジェクトを展開すると、プロジェクトに1つまたは2つのモジュールが表示されます。 (覚えておいてください。VBAマクロはモジュールに含まれています。)この説明のために、MyMacro(実行するマクロ)がCoolDocプロジェクトのHotStuffモジュールに含まれていると仮定します。
(これらのオブジェクト名はすべてまもなく使用されます。この時点で、プロジェクトとマクロを含むモジュールに使用されている名前をメモする必要があります。)
これで、マクロの呼び出し元のプロジェクトにCoolDocプロジェクト参照を実際に追加する準備が整いました。この例では、Normalプロジェクトのマクロから呼び出すと仮定します。次の手順に従って参照を追加できます(VBAエディターがまだ開いていると仮定します):
。 VBAエディターの左上にある[プロジェクト]ウィンドウで、[標準]フォルダーを選択します。
。 [ツール]メニューから[参照]を選択します。 [参照]ダイアログボックスが表示されます。 (図1を参照)
。利用可能なリファレンスのリストで、CoolDocを見つけます。
。 CoolDocオプションの左側にあるチェックボックスが選択されていることを確認します。
。 [OK]をクリックします。
これで、MyMacroを呼び出すマクロにCallステートメントを追加する準備が整いました。コマンドラインは次のように表示されます:
Call CoolDoc.HotStuff.MyMacro
このコマンドラインにより、VBAはあいまいさの可能性なしに目的のマクロを実行します。ただし、注意すべき重要な点があります。
CoolDocプロジェクトへの参照をNormalに配置すると、CoolDoc.dotmテンプレートに基づくドキュメントが開いていない場合でも、Wordが起動するたびにNormalがCoolDocのコピーをロードします。
このCoolDocの読み込みにより、明らかな疑問が生じます。読み込み時間やリソース使用量を節約できないため、MyMacroをCoolDoc.dotmに配置することのVBAでのポイントは何ですか?簡単に言えば、CoolDoc.dotmが、CoolDoc.dotm内のものにのみ関連するコードを配置するためのより明白な場所である可能性があることを除いて、何の意味もありません。 (賢明なプロジェクト設計のこのトピック全体は、この1つのヒントで説明するには大きすぎる主題です。)
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(11412)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice 365のWordに適用されます。このヒントのバージョンは、ここにWordの古いメニューインターフェイス:
linkCallを使用してVBAマクロを実行する。