SOLIDWORKS
SOLIDWORKS 錄製巨集怎麼用?錄製、執行、編輯的位置,與換零件就失效的原因
用 SOLIDWORKS 的錄製巨集把一連串操作錄下來,在原本的檔案上執行很正常, 換一個零件、換一台電腦就出錯或沒有反應?原因不一定是巨集壞了, 而是錄製下來的內容本來就只描述了「那一次」的操作。
這篇先整理錄製、執行、編輯巨集的位置,再說明錄製巨集換檔案就失效的幾個原因與改法。 介面名稱以 SOLIDWORKS 2025 繁體中文說明為準,API 的行為依 SOLIDWORKS API Help(英文)。
本文目錄(7 節)
錄製、執行、編輯巨集要按哪裡
| 要做的事 | 「巨集」工具列 | 功能表 | 補充 |
|---|---|---|---|
| 錄製 | 錄製/暫停巨集 | 工具 > 巨集 > 錄製 | 錄製中再按一次錄製/暫停巨集是暫停,再按一次繼續錄製 |
| 停止並存檔 | 停止巨集 | 工具 > 巨集 > 停止 | 在「檔案名稱」輸入名稱後按儲存,副檔名 .swp 會自動加上 |
| 執行 | 執行巨集 | 工具 > 巨集 > 執行 | 可以開 *.swp、*.swb;巨集裡有多個副程式時,只會執行其中一段,見巨集按了沒反應 |
| 編輯 | 編輯巨集 | 工具 > 巨集 > 編輯 | 工具 > 巨集 的選單會列出最後 9 個編輯的巨集;執行或編輯 .swb 時,會自動轉換為 .swp |
| 從頭寫新的 | 新巨集 | 工具 > 巨集 > 新增 | 輸入檔名儲存後開啟巨集編輯程式;產生新巨集與錄製巨集不同 |
想錄完就直接看錄出來的內容,到工具 > 選項 > 系統選項 > 一般,勾選「錄製後自動編輯巨集(A)」, 錄製並儲存巨集之後會開啟巨集編輯器。「巨集」工具列預設不顯示,叫出來的方法見巨集工具列或巨集按鈕不見了。
錄製器記下的是「這一次」的點選
依官方說明,錄製的巨集包含相當於在使用者介面執行操作時對 API 函數的呼叫, 可以記錄滑鼠點取的位置、功能表的選擇與鍵盤的輸入。
選取物件的動作,會變成一行「依名稱與類型選取」的指令(API 的 SelectByID2): 物件名稱、物件類型,以及點選的 X、Y、Z 位置都直接寫在裡面。換到另一個檔案,名稱或位置不同, 選取就會失敗,後續的步驟跟著出錯。
名稱寫死:換檔案、換語系就找不到
- 特徵名稱:同一種特徵在不同零件的編號不同(A 零件是第 1 個伸長,B 零件是第 3 個),或已被重新命名
- 大小寫:名稱要完全相符才選得到,只有大小寫不同也可能選不到
- 基準面名稱:中文版預設的是前基準面、上基準面、右基準面,同一個巨集拿到英文版 SOLIDWORKS 的檔案上,名稱是 Front Plane、Top Plane、Right Plane,就找不到
- 組合件元件:在組合件裡選取元件中的項目,可以用含元件與組合件名稱的完整名稱,官方範例是 Plane4@Part1-1@Assem1; 換一個組合件,這個名稱就不存在
在中文作業系統上執行中文版 SOLIDWORKS 時,工具 > 選項 > 系統選項 > 一般 有「使用英文的特徵及檔案名稱(N)」: 選擇後,FeatureManager(特徵管理員) 設計樹狀結構中的特徵名稱會以英文顯示,並自動產生英文的檔案名稱。 但既有的非英文特徵及檔案名稱不會更新,舊檔案裡的前基準面還是前基準面。
選面跟著畫面視角:縮放、旋轉後可能選不到
錄製時點選的面,巨集裡記下的不是面的名稱,而是點選的位置。依 API 說明,選面時是拿這個點去做跟手動點選一樣的畫面點選; 畫面的大小或方向跟錄製時不同,下次就可能選不到同一個面。所以就算是同一個檔案、同一台電腦, 畫面縮放或旋轉過,結果就可能不一樣。選面依賴座標、容易因視角改變而失敗時,錄製器會改用依射線選取的指令(SelectByRay)。
錄製期間的旋轉、縮放、平移等畫面操作,官方建議不熟悉錄製的人先多錄幾次,把這些操作排除掉, 錄好後再編輯巨集,刪掉多餘的程式行。
數值看起來很怪:API 用公尺與弧度
錄製出來的巨集裡,可能會看到 0.01、0.025 這種數字。這是因為除非函式說明另有註明, SOLIDWORKS API 的數值都以公尺、弧度(以及公斤、平方公尺、立方公尺)傳入與傳回。
| 介面上輸入 | 巨集中的值 |
|---|---|
| 10 mm | 0.01 |
| 25 mm | 0.025 |
| 90° | 1.5707963(π/2) |
長度以 mm 輸入的檔案,直接修改巨集裡的尺寸時忘了換算,結果就會差 1000 倍。
沒有判斷:遇到不同狀況就中斷
錄製的巨集只照順序重做那一次的操作,不會判斷目前的狀況,例如以下情形就會中斷:
- 沒有開啟任何文件就執行:沒有使用中的文件時,取得目前文件的
ActiveDoc會傳回 Nothing,接著就出現錯誤 91(Microsoft 說明標題為「未設定物件變數」) - 在工程圖上執行了只適用於零件的巨集
- 選取失敗時只傳回 False,錄製的巨集不會檢查這個結果,後面的步驟對著空的選取繼續做
其他錯誤訊息的意思與處理方式,見SOLIDWORKS 巨集無法執行或跳出錯誤的排查。
改法:把「錄製」改寫成「規則」
錄製巨集適合用來「查出某個操作要呼叫哪個 API」。官方建議的流程也是錄製後編輯巨集,刪掉多餘的程式行、 明確宣告變數,再測試與除錯。要能重複使用,需要改寫成依規則判斷:
- 先確認環境:有沒有開啟文件、文件類型對不對;沒有文件時先提示使用者並結束,不要讓它跳出錯誤 91
- 用規則找物件,不用名稱:例如依特徵類型逐一尋找、依自訂屬性判斷,而不是寫死特徵名稱
- 路徑從文件本身推算:輸出位置以目前檔案所在的資料夾為基準,檔名由屬性組合
- 每一步檢查結果:選取或輸出失敗時,停止並告訴使用者原因
要依料號、版次自動命名,整批輸出 PDF、DXF、STEP,見SOLIDWORKS 批次轉檔客製:PDF・DXF・STEP 依料號命名。
功能少、只有自己用時,改寫過的巨集就很夠用;要給整個部門長期使用、需要統一安裝與更新時, 再考慮做成 Add-in。
參考資料:SOLIDWORKS 2025 繁體中文說明錄製和執行巨集、系統選項 - 一般、工具列、草圖; SOLIDWORKS API Help(英文)SOLIDWORKS Macros、SelectByID2、Units、Record SOLIDWORKS Macro、Microsoft Visual Studio Tools for Applications (VSTA)、ActiveDoc; Microsoft 說明 未設定物件變數 (錯誤 91)
常見問題
Q:SOLIDWORKS 錄製巨集要按哪裡?
按工具 > 巨集 > 錄製(或「巨集」工具列的錄製/暫停巨集),做完要錄的步驟後按停止巨集(工具 > 巨集 > 停止),在「檔案名稱」輸入名稱後按儲存,會自動加上 .swp。
Q:錄好的巨集可以給同事用嗎?
可以,對方用工具 > 巨集 > 執行開啟 .swp 就能執行。但巨集裡的特徵名稱與點選位置,都是照你錄製當下寫進去的;對方的檔案名稱不同、畫面視角不同,就可能選不到。給別人之前,先在另一個檔案、另一台電腦測試一次。
Q:錄製時可以存成 VB.NET 或 C# 嗎?
可以。停止錄製後存檔時,存檔類型可以選 SW VSTA VB Macro (*.vbproj) 或 SW VSTA C# Macro (*.csproj)(英文說明的名稱),建置或偵錯後會產生 .dll,SOLIDWORKS 可以像 .swp 一樣使用。選 SW VBA Macros (*.swp) 則是一般的 VBA 巨集。安裝 SOLIDWORKS 時沒有一起裝 VSTA 的話,存檔類型只會有 SW VBA Macros (*.swp)。