常見問題:Revit 巨集

本節將解答 Revit 巨集的常見問題。

問題 回答

為什麼我持續看到「您是否信任此資料夾中檔案的作者」訊息?如何阻止此訊息出現?

此訊息來自 VSCode,是 Microsoft「工作區信任」程式的一部分,可提升安全性。

若要阻止訊息出現,請執行以下操作:
  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_StartupModule_Shutdown

載入模組時會呼叫 Module_Startup 方法,卸載模組時會呼叫 Module_Shutdown

若為應用程式層級巨集模組,Revit 啟動時會呼叫 Module_Startup,而在 Revit 關閉時則會呼叫 Module_Shutdown

若為文件層級巨集模組,開啟 Revit 專案時會呼叫 Module_Startup,而在關閉專案文件時會呼叫 Module_Shutdown

重新建立巨集專案時,也會呼叫 Module_StartupModule_Shutdown

您可以在 Module_Startup 方法中加入起始程式碼,並在 Module_Shutdown 方法中執行清理工作。例如,您可以在啟動時登錄事件處理常式,並在關機時加以解除登錄 (建議作法)。

我應該登錄和解除登錄 Revit 事件處理常式的方法和原因為何? 如前所述,在 Revit IDE 中執行此項操作的建議方法是在 *_Startup 方法中登錄事件處理常式,並在 *_Shutdown 方法中解除登錄。如此即可動態載入和卸載每個巨集。偵錯巨集時,如果未正確解除登錄事件處理常式,Revit 可能會呼叫錯誤的方法 (可能是無效的記憶體位址)。雖然 Revit IDE 在此情況下均可防止 Revit 損毀,但任何未正確解除登錄的事件處理常式,可能會在目前 Revit 工作階段期間引發效能問題。
有一個對話方塊似乎運作不正常,並導致 Revit 發生問題。 在執行中 API 收回的範圍外運作的無模式對話方塊可能會引發問題。建議您避免這類收回以防止 Revit 發生不穩定的事件。
我想要試驗 Startup 和 Shutdown 方法及事件處理常式。可以展示範例嗎? 下列範例程式碼展示如何登錄 OnDocumentNewed 事件處理常式,它會在建立新 Revit 專案時自動啟動訊息方塊。注意事項:Revit SDK 提供的其中一個巨集範例,可能會展示文件層級事件處理常式的啟動和關閉範例。此常見問題展示應用程式層級事件處理常式範例。

請注意,在 2011 中,所有 API 事件都可由 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");
}