重點摘要
- 一般 .xlsx 活頁簿不能保存 VBA,但可以執行另一個已開啟 .xlsm 中的巨集。
- 操作前必須同時開啟「要處理的報表」與「保存巨集的工具活頁簿」。
- 執行前先點選目標報表,確認它是作用中活頁簿與作用中工作表。
- 巨集使用 ActiveWorkbook 或 ActiveSheet 時會處理目前選取的檔案;使用 ThisWorkbook 時通常會指向保存程式碼的檔案。
- 分享 .xlsm 前應說明用途、版本、使用步驟與安全注意事項。
最簡單的作法是同時開啟兩個檔案,再從目標 .xlsx 的「檢視巨集」選取 .xlsm 中的公開巨集並執行。關鍵不是巨集視窗從哪個檔案開啟,而是巨集程式碼究竟操作 ActiveWorkbook、ActiveSheet 還是 ThisWorkbook。
跨活頁簿執行巨集的運作方式
Excel 同一個應用程式執行個體中,只要巨集活頁簿已開啟,符合條件的公開巨集通常會出現在「巨集」對話方塊。這讓使用者可以把自動化程式集中保存在 巨集工具.xlsm,再用它處理沒有 VBA 的 每月報表.xlsx。
| 名稱 | 指向對象 | 常見用途 |
|---|---|---|
| ActiveWorkbook | 目前作用中的活頁簿 | 處理使用者剛點選的報表 |
| ActiveSheet | 目前作用中的工作表 | 格式化當前工作表 |
| ThisWorkbook | 保存這段 VBA 的活頁簿 | 讀取工具檔設定或固定資源 |
因此,同一支巨集能否安全套用到其他報表,取決於程式碼是否正確指定處理對象。

如何從一般活頁簿執行另一個檔案的巨集?
以下使用虛擬檔名 每月報表.xlsx 與 巨集工具.xlsm。先複製練習檔再操作,不要直接在唯一一份正式報表測試。
① 📂 確認兩個檔案的用途
每月報表.xlsx 是要被處理的資料檔;巨集工具.xlsm 保存「美化表格」與「恢復原狀」等 VBA。使用檔案總管確認兩者副檔名正確。
② 🔓 同時開啟兩個活頁簿
先開啟 巨集工具.xlsm,確認來源可信後依組織政策啟用巨集;再開啟 每月報表.xlsx。若工具活頁簿沒有開啟,其中的巨集不會出現在可執行清單。
③ 🖥️ 並排視窗方便辨識
可使用 Windows + ← 與 Windows + → 將兩個 Excel 視窗分到螢幕左右。檢查標題列:左側是目標報表,右側是巨集工具。並排不是必要條件,但能降低選錯檔案的機率。
④ 🎯 點選要處理的工作表
先在 每月報表.xlsx 點選要美化的工作表與任一儲存格,讓它成為作用中工作表。若巨集使用 ActiveSheet,這一步會直接影響執行目標。
⑤ ⚙️ 開啟「檢視巨集」
選取「檢視」→「巨集」→「檢視巨集」,或按 Alt + F8。在「巨集的位置」選擇「所有開啟的活頁簿」,再找出 巨集工具.xlsm 中的巨集。
⑥ ▶️ 選取巨集並執行
選取「美化表格」後按「執行」。完成後先檢查標題、資料列、公式、框線與數值是否正確,不要因畫面看起來漂亮就直接覆蓋原始檔。
⑦ ↩️ 測試還原與重新執行
若工具檔有「恢復原狀」巨集,可在練習副本執行並確認回復範圍。注意:VBA 執行後通常不能依賴 Excel 的復原功能,因此工具本身應設計還原流程或先建立備份。
⑧ ✅ 儲存結果並關閉工具檔
確認報表無誤後,再儲存 每月報表.xlsx。若只是套用格式或寫入結果而沒有加入 VBA,仍可維持 .xlsx;巨集工具.xlsm 則應保留為 .xlsm。
用 VBA 明確呼叫另一個活頁簿的巨集
若要由某個程序明確呼叫已開啟工具檔中的巨集,可使用 Application.Run。以下是概念示例,活頁簿名稱與程序名稱必須與實際檔案一致:
``vb
Application.Run "'巨集工具.xlsm'!美化表格"
若工具檔尚未開啟、檔名不同、程序不是可公開呼叫的 Public Sub`,或巨集需要參數,執行就可能失敗。先用「巨集」對話方塊完成手動驗證,再進行程式化呼叫,較適合新手。
專有名詞說明
| 名詞 | 新手說明 |
|---|---|
| 作用中活頁簿 | 目前正在操作的 Excel 檔案。 |
| 作用中工作表 | 目前顯示並接受操作的工作表。 |
| 公開巨集 | 可由巨集對話方塊或其他程序呼叫的 Public Sub,通常不帶參數。 |
Application.Run | 依名稱執行巨集或函數的方法。 |
ThisWorkbook | VBA 程式碼所在的活頁簿,不一定是目前畫面中的目標報表。 |
| 個人巨集活頁簿 | Excel 啟動時可自動開啟的隱藏巨集檔,適合個人常用工具;與本文分享 .xlsm 的方式不同。 |
示範情境:共用一份表格美化工具
示範情境中,團隊每月收到沒有 VBA 的 .xlsx 報表,但欄位結構固定。負責人提供一份已測試的 巨集工具.xlsm,使用者同時開啟兩個檔案,再從目標工作表執行「美化表格」。好處是原始報表不必內嵌程式碼;限制是工具檔必須保持開啟,而且來源欄位、工作表名稱或資料範圍改變時,巨集仍可能需要修改。
給 AI 的跨活頁簿巨集檢查提示詞
你是一位 Excel VBA 程式碼審查助理。我要用「巨集工具.xlsm」處理另一個已開啟的「每月報表.xlsx」。
請用繁體中文(台灣)協助我:
1. 檢查程式碼中的 ThisWorkbook、ActiveWorkbook、ActiveSheet 各自會指向哪裡;
2. 找出可能處理錯活頁簿或工作表的程式碼;
3. 提供以明確變數指定目標活頁簿的安全寫法;
4. 加入檔案未開啟、工作表不存在與使用者取消時的錯誤處理;
5. 提供逐步測試清單,但不要直接在正式檔執行。
我會貼上去除公司名稱、客戶資料與個資後的 VBA 程式碼。常見錯誤與排除方式
- 巨集清單看不到工具檔的程序:確認
.xlsm已開啟、巨集已獲允許,程序位於標準模組且是可公開呼叫的Sub。 - 格式套用到工具檔:執行前重新點選報表;檢查程式碼是否錯用
ThisWorkbook。 - 關閉工具檔後無法執行:本文方法要求工具活頁簿保持開啟。
- 巨集名稱重複:在「巨集的位置」篩選活頁簿,或使用包含活頁簿名稱的
Application.Run。 - 執行後無法復原:先在副本測試,或在巨集中設計備份與還原流程。
- 同事電腦無法啟用:不要要求對方關閉所有安全防護;應依公司政策使用受信任位置、數位簽章或由資訊人員部署。
分享巨集工具前的檢查清單
- 🧪 使用虛擬資料測試所有巨集。
- 🏷️ 標示工具版本、更新日期與適用的 Excel 版本。
- 📘 附上「先開工具檔、再開報表、選取目標、執行巨集」的操作說明。
- 🛡️ 說明檔案來源與安全驗證方式,不要求使用者全面停用巨集防護。
- 💾 提醒使用者先建立報表副本。
- 🔁 準備還原巨集或明確說明哪些操作無法復原。
- 📌 列出必要的工作表名稱、欄位與資料範圍。
常見問題
目標報表一定要另存成 .xlsm 嗎?
不一定。若巨集程式碼只保存在工具檔,目標報表只接收格式或資料結果,仍可保存為 .xlsx。只有需要把 VBA 一起存進目標檔案時,才要改用 .xlsm。
可以把工具活頁簿關閉或隱藏嗎?
關閉後就不能用本文方式呼叫其中的巨集。熟悉 VBA 後可評估個人巨集活頁簿或 Excel 增益集,但它們有不同的部署與維護方式。
為什麼同一支巨集在不同報表結果不同?
常見原因包括作用中工作表不同、欄位位置改變、固定範圍寫死、工作表名稱不同,或程式碼使用了 ThisWorkbook。先檢查輸入條件,再逐行確認物件參照。
延伸閱讀
- Excel VBA 效率提升分類
- Excel .xlsx 與 .xlsm 差在哪?
- 分段錄製 Excel 巨集並讀懂 VBA 程式碼
- Excel VBA 動態範圍與美化表格完整修改
- 倍增 Excel VBA 自動化超能力課程
參考來源
- Microsoft Learn:Application.Run 方法(Excel) - Microsoft 支援服務:儲存巨集 - Microsoft 支援服務:Excel 中支援的檔案格式 作者:施文華|企業自動化顧問/講師 更新日期:2026-09-23|內容版本:1.0
