FAQ: Revit マクロ

このセクションでは、Revit マクロについてよくある質問について回答します。

質問 回答

「このフォルダ内のファイルの作成者を信頼しますか」というメッセージが表示され続ける理由と、このメッセージが表示されないようにする方法を教えてください。

これは VSCode から送信されるメッセージであり、セキュリティを向上させるための Microsoft の「Workspace Trust」プログラムの一環です。

このメッセージが表示されないようにするには、次の操作を実行します。
  1. VSCode で[ワークスペースの信頼を管理]設定を起動します。
  2. ウィンドウの下部にある[フォルダーの追加]をクリックします。
  3. 信頼する次のパスを選択します。
    • C:\ProgramData\Autodesk\Revit\Macros\2025\Revit\AppHookup
      注: 「2025」は、作業している Revit のリリース年を示しています。必要に応じて変更します。
新しく作成したマクロがマクロ マネージャの分類リストに表示されるものと期待しましたが、表示されません。なぜでしょうか。 新しいマクロがマクロ マネージャに表示されるには、Revit マクロ IDE でマクロ プロジェクトが正しくビルドされている必要があります([ビルド]メニューを使用)。
新しいマクロを作成するときに RevitAPI.dll および RevitAPIUI.dll を参照として追加する必要がありますか。 いいえ。この手順は完了しているため、RevitAPI.dll ファイルと RevitAPIUI ファイルを参照する必要はありません。Revit マクロ プロジェクトでは、どちらも必要な参照として使用されます。

RevitAPI.dll および RevitAPIUI.dll を復元する」を参照してください。

Revit.ini ファイルを編集する必要がありますか? いいえ。Revit マクロは、システムを修正しなくても、マクロ マネージャに表示されるよう自動的に登録されます。
Revit マクロ IDE で、This*.cs ファイルまたは This*.vb ファイル内で対応するメソッドを削除してマクロを削除しました。しかし、マクロ マネージャの分類リストを再度開くと、削除したマクロの名前がまだ表示されます。この名前をリストから消すにはどうすればよいでしょうか。 マクロ マネージャが削除を認識する前に、編集したプロジェクトを正しくビルドしておく必要があります。
スタートアップおよびシャットダウン メソッド(Module_Startup および Module_Shutdown)には何を含める必要がありますか?

Module_Startup メソッドはモジュールのロード時に呼び出され、Module_Shutdown はモジュールのアンロード時に呼び出されます。

アプリケーションレベル マクロ モジュールの場合、Revit の起動時に Module_Startup が呼び出され、Revit のシャットダウン時に Module_Shutdown が呼び出されます。

ドキュメントレベル マクロ モジュールの場合、Revit プロジェクトを開いたときに Module Startup が呼び出され、プロジェクト ドキュメントを閉じたときに Module_Shutdown が呼び出されます。

Module_Startup および Module_Shutdown は、マクロ プロジェクトの再ビルド時にも呼び出されます。

初期化コードを Module_Startup メソッドに追加し、Module_Shutdown メソッドでクリーンアップ作業を実行できます。たとえば、起動時にイベント ハンドラを登録し、シャットダウン時に登録を解除することができます(この方法をお勧めします)。

Revit イベント ハンドラを登録および登録解除する方法およびその理由について教えてください。 前述のとおり、Revit IDE でこれを行う場合は、*_Startup メソッドでイベント ハンドラを登録し、*_Shutdown メソッドで登録を解除する方法をお勧めします。すべてのマクロが、動的にロードされてロード解除されます。マクロをデバッグするときに、イベント ハンドラが正しく登録解除されていないと、Revit によって、間違ったメソッド(おそらくは無効なメモリ アドレス)が呼び出される可能性があります。Revit IDE ではこうした状況で Revit がクラッシュすることを防ぎますが、正しく登録解除されていないイベント ハンドラがあると、それによって現在の Revit セッション中にパフォーマンスの問題が発生する場合があります。
正しく動作していないように見え、Revit で問題を引き起こしているダイアログがあります。 実行中の API コールバックの範囲外で動作するモードレス ダイアログは、問題を引き起こす可能性があります。Revit が不安定な状態になるのを避けるために、このようなコールバックは使用しないことをお勧めします。
Startup および Shutdown メソッドとイベント ハンドラを試してみたいと思います。例を教えてください。 下のサンプル コードでは、新しい Revit プロジェクトが作成されたときにメッセージ ボックスを自動的に起動する OnDocumentNewed イベント ハンドラを登録する方法が示されています。注: Revit SDK に付属するマクロ サンプルの 1 つに、ドキュメントレベル イベント ハンドラのスタートアップとシャットダウンの例を示すものがあります。この FAQ に示す例は、アプリケーションレベル イベント ハンドラです。

すべての API イベントは、2011 の Revit IDE からアクセスできる点に注意してください。2011 より前のイベントは削除されています。次の例は、新しいイベントを示しています。

C# アプリケーションレベルの例:

private void Module_Startup(object sender, EventArgs e)
{
   this.Application.DocumentOpened
      += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);
}

private void Module_Shutdown(object sender, EventArgs e)
{
   this.Application.DocumentOpened
      -= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened); 
}

void Application_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
{ 
   System.Windows.Forms.MessageBox.Show("message here");
}