Office 2024/Microsoft 365 中 ActiveX 無法運作的原因與檢查步驟
· 小村 豪 · ActiveX, COM, Office, Microsoft 365, 32bit, 64bit, Windows, 既有資產活用
首先必須了解的事
Office 2024 與 Microsoft 365 中,ActiveX 控制項預設處於停用狀態。 以前正常運作的 Excel 按鈕、表單,以及 Word / PowerPoint 中的嵌入物件,在更新後突然看起來「無法運作」,多半 不是程式故障,而是安全性預設值變更 所致。
原因大致可分成 3 類。
- 安全性設定變化(Trust Center、ActiveX 預設停用)
- 32bit / 64bit 不一致(在 64bit Office 上載入僅支援 32bit 的控制項)
- COM 註冊或相依 DLL / 執行階段不足(未執行 regsvr32、缺少 VC++ 執行階段)
實務鐵則:依照這個順序從上往下排查最快。
Office 2024 系列 vs Microsoft 365 ── 差異在哪裡
| 觀點 | Office 2024 系列(永久授權) | Microsoft 365 Apps(訂閱制) |
|---|---|---|
| 更新模式 | 只提供安全性 / 品質更新,不新增功能 | 依頻道持續更新功能 |
| ActiveX 預設值 | 預設停用 | 預設停用(相同) |
| 登錄機碼 / 原則路徑 | 仍為 16.0 | 仍為 16.0 |
| 支援的 OS(截至 2026 年) | Windows 11、Server 2025 / 2022、Win10 LTSC | Windows 11、Server 2025 / 2022 為正式要求。Win10 則有到 2028 年 10 月的轉換緩衝期 |
| 安裝方式 | Click-to-Run(非 MSI) | Click-to-Run |
重點:即使是 Office 2024,登錄機碼路徑仍然是 16.0。「因為是 2024 所以要找 24.0」是常見的白繞路。
Windows 10 的注意事項
Windows 10 的一般支援已於 2025 年 10 月 14 日結束。不過 Microsoft 365 Apps 在 Windows 10 上仍處於 到 2028 年 10 月 10 日為止 提供安全性更新的轉換緩衝期。也就是說:
- 並非「在 Windows 10 上完全無法運作」
- 是「OS 已停止支援、Apps 仍在緩衝期」這種雙重前提下運作的狀態
疑難排解全貌
flowchart TD
A[重現症狀] --> B[取得 Office 產品名稱·組建·bitness·OS 資訊]
B --> C{OS / Office 的支援前提是否 OK?}
C -- 不行 --> C1[修正前提:重新檢視 OS / Office 版本 / 頻道]
C -- OK --> D[檢查 Trust Center]
D --> E{ActiveX 設定 / 保護模式檢視 / 信任的文件有問題?}
E -- 有 --> E1[修正設定·簽署·散布設計]
E -- 沒有 --> F{屬於舊版 Web / IE 前提?}
F -- 是 --> F1[檢查 IE 模式與網站清單]
F -- 否 --> G[檢查 CLSID / InprocServer32 / TypeLib]
G --> H{COM 註冊是否正常?}
H -- 不行 --> H1[regsvr32 / RegAsm / 重新安裝]
H -- OK --> I[檢查相依 DLL / .NET / VC++ 執行階段]
I --> J{相依關係是否滿足?}
J -- 不行 --> J1[修復·重新散布對應的執行階段]
J -- OK --> K[收集記錄 / Procmon / Process Explorer]
K --> L[比對組建差異·安全性更新差異]
Step 1 ── 收集環境資訊
首先務必記錄以下資訊。因為要靠 數值 而非感覺來判斷。
Office 端
- 在 [檔案]→[帳戶]→[產品資訊] 確認
- 產品名稱(區分 Office 2024 / Microsoft 365)
- 版本與 組建編號(最重要)
- 安裝類型(Click-to-Run)
- 在 [關於 Excel]/[關於 Word] 等產品資訊對話方塊確認是 32bit 還是 64bit
Windows 端
# OS 基本資訊
Get-CimInstance Win32_OperatingSystem |
Select-Object Caption, Version, BuildNumber, OSArchitecture
# Office 處理程序的執行檔路徑
Get-Process WINWORD, EXCEL, POWERPNT, VISIO -ErrorAction SilentlyContinue |
Select-Object ProcessName, Path
常見的錯誤觀念
| 錯誤觀念 | 正確想法 |
|---|---|
| 用「是最新版本」就結案 | 要確認 組建編號。Microsoft 365 的頻道差異很大 |
| 在 64bit Office 上載入僅支援 32bit 的 COM / ActiveX | Office 的 bitness 與 COM 的 bitness 必須一致 |
| 認定「Windows 10 就是不行」 | 雖然在轉換緩衝期內有可能仍能運作,但前提並不穩定 |
Step 2 ── 檢查 Trust Center 與安全性設定
這裡要做的是區分 「檔案本身被封鎖」 還是 「COM 實體載入失敗」。
檢查清單(依序往下)
| # | 檢查項目 | 檢查位置 | 常見原因 |
|---|---|---|---|
| 1 | ActiveX 訊息列 | 開啟檔案時出現的黃色訊息列 | 預設停用。試著用 [啟用內容] 看是否能暫時運作 |
| 2 | Trust Center > ActiveX 設定 | [檔案]>[選項]>[信任中心] | 是否設定成「不顯示通知並停用全部」 |
| 3 | 保護模式檢視 | Trust Center > 保護模式檢視 | 從網路共用或郵件附件開啟會被封鎖 |
| 4 | 信任的文件 | Trust Center > 信任的文件 | 一旦被信任過,警告就不會再出現,重現結果會因裝置而異 |
| 5 | 信任的發行者 | Trust Center > 信任的發行者 | 即使有簽署,若證書未散布也不會被允許 |
| 6 | 巨集設定 | Trust Center > 巨集設定 | 巨集與 ActiveX 是不同的設定,但有時會複合影響 |
先嘗試這些
- 將問題檔案複製到 本機受管理的資料夾(例如
C:\Temp),另存新檔 - 避免直接從網路共用或郵件附件開啟(排除保護模式檢視的影響)
- 以 安全模式 啟動 Office,排除附加元件的影響
excel /safe
winword /safe
powerpnt /safe
Step 3 ── 確認是否為 IE 模式相依
原本以為是「一般的 ActiveX 問題」,實際上有時是因為 Edge 的 IE 模式未設定 所導致。
- IE 模式不是整個瀏覽器的開關,而是 只套用在已登錄於 Enterprise Site List 的網站
- 若只有內部 Web 系統的一部分無法運作,請檢查該網站是否屬於 IE 模式對象
檢查位置如下:
- Edge 原則:系統管理範本 > Microsoft Edge
- 登錄機碼:
HKLM\SOFTWARE\Policies\Microsoft\Edge - 診斷頁面:
edge://compat/iediagnostic
Step 4 ── 檢查 COM 註冊
若 Trust Center 沒有問題,接下來要確認 COM 實體是否正確註冊。
基本檢查指令
:: 檢查 CLSID 的註冊狀態
reg query "HKLM\SOFTWARE\Classes\CLSID\{YOUR-CLSID-HERE}\InprocServer32" /s
:: 原生 COM / ActiveX DLL 的註冊·解除註冊
regsvr32 C:\Path\YourControl.dll
regsvr32 /u C:\Path\YourControl.dll
.NET 製作的 COM(重要)
.NET 組件無法使用 regsvr32,必須使用 RegAsm。
:: 64bit Windows 上的 32bit Office → 使用 Framework 的 RegAsm
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "C:\Path\YourControl.dll" /codebase /tlb
:: 64bit Office → 使用 Framework64 的 RegAsm
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" "C:\Path\YourControl.dll" /codebase /tlb
典型事故:「RegAsm 的 bitness 與 Office 的 bitness 不一致」→ 登錄機碼上顯示註冊成功,但 Office 卻找不到。
Step 5 ── 檢查相依 DLL / 執行階段
「本體 DLL 存在卻無法載入」的情況,多半是 相依對象不足。
實務上常見缺少的執行階段
| 容易缺少的項目 | 檢查方法 |
|---|---|
| Visual C++ 可轉發套件(2013、2015-2022) | 在控制台 > 程式和功能中確認清單 |
| .NET Framework 4.8.1 | reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" |
| 相依 DLL(廠商自訂) | 用 Process Explorer / Procmon 確認 |
低層級調查工具
| 工具 | 用途 |
|---|---|
| Process Explorer | 確認處理程序載入的 DLL 清單 |
| Procmon | 即時追蹤 NAME NOT FOUND / PATH NOT FOUND / ACCESS DENIED |
用 Procmon 收集重現時的記錄,以 NAME NOT FOUND 篩選,就能一目了然是哪個 DLL 或登錄機碼找不到。
Step 6 ── 取得記錄做最終確認
如果到這一步還無法找出原因,就啟用記錄功能,抓住重現的瞬間。
啟用 Office 一般記錄
reg add HKCU\Software\Microsoft\Office\16.0\Common\Logging /v EnableLogging /t REG_DWORD /d 1
啟用 Click-to-Run 詳細記錄
reg add HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v LogLevel /t REG_DWORD /d 3
reg add HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v PipelineLogging /t REG_DWORD /d 1
記錄會輸出到 %windir%\temp 或 %temp%。
同時搭配事件檢視器
eventvwr.msc
- 檢查 Windows 記錄 > 應用程式
- .NET Runtime 或 SideBySide 的錯誤往往是決定性的線索
驗證後別忘了停用記錄
reg delete HKCU\Software\Microsoft\Office\16.0\Common\Logging /v EnableLogging /f
reg delete HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v PipelineLogging /f
reg delete HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v LogLevel /f
主要登錄機碼 / 原則速查表
必記的 4 個路徑
| 用途 | 路徑 |
|---|---|
| Office 原則根目錄 | HKLM\SOFTWARE\Policies\Microsoft\Office\16.0 |
| 確認 ActiveX 全面停用 | HKCU\Software\Microsoft\Office\Common\Security\DisableAllActiveX(1=停用,0=解除) |
| COM 實體註冊 | HKLM\SOFTWARE\Classes\CLSID\{CLSID}\InprocServer32 |
| Office COM kill bit | HKLM\Software\Microsoft\Office\16.0\Common\COM Compatibility\{CLSID} |
在 64bit Windows 上使用 32bit Office 時,COM 相關項目也要檢查
Wow6432Node之下。
常用測試登錄機碼(僅供驗證)
Windows Registry Editor Version 5.00
; 僅供測試:解除 ActiveX 全面停用
[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security]
"DisableAllActiveX"=dword:00000000
警告:這些設定僅供驗證使用。永久對策請以「可信賴的散布途徑與簽署」來執行。
常見症狀與對策
| 症狀 | 最可能的原因 | 先嘗試的做法 |
|---|---|---|
| 更新後按鈕沒有反應 | ActiveX 預設停用 | 訊息列 →[啟用內容]→ 檢查 Trust Center |
| 只在 64bit Office 上失敗 | 僅支援 32bit 的 COM / ActiveX | 向廠商確認是否有 x64 版本,若沒有則切換到 Office 32bit |
| 只有特定電腦無法運作 | COM 未註冊 / 註冊損毀 | 用 reg query 確認 CLSID → 用 regsvr32 重新註冊 |
| DLL 存在卻無法載入 | 相依 DLL / VC++ 執行階段不足 | 用 Procmon 追蹤 NAME NOT FOUND |
| 從網路共用或郵件附件開啟時失敗 | 保護模式檢視 / MOTW | 複製到本機資料夾比對重現差異 |
| 只有內部 Web 系統的一部分失敗 | IE 模式未設定 | 將目標網站加入 Enterprise Site List |
| 已簽署卻仍不被允許 | 憑證未散布 / 未登錄信任的發行者 | 確認程式碼簽署有效性與憑證散布狀況 |
| 沿用 MSI 時代的導入程序導致行為改變 | 轉換為 Click-to-Run 前提 | 重新檢視舊腳本或以自行註冊為前提的設計 |
企業建議設定
永久對策的基本原則是 「不是降低整體安全性,而是只針對必要對象做有限度的允許」。
| 項目 | 建議 |
|---|---|
| 更新頻道(Microsoft 365) | 高度依賴舊版 ActiveX 的裝置,建議使用 每月企業版頻道(變更較容易掌握) |
| Office bitness | 除非廠商明確表示支援 x64,否則優先考慮 Office 32bit |
| Trusted Locations | 網路上的信任位置 原則上禁止,需要時採用例外申請方式 |
| 簽署 | 自家散布的 ActiveX / 巨集 / 附加元件要 進行程式碼簽署,並集中管理 Trusted Publisher |
| IE 模式 | 只將必要的 URL 加入 Enterprise Site List(避免整體舊化) |
| 部署前驗證 | 正式散布前建立 pilot ring,以具代表性的表單 / 裝置固定組建版本驗證 |
Microsoft 365 部署設定範例(32bit + 每月企業版)
<Configuration>
<Add OfficeClientEdition="32" Channel="MonthlyEnterprise">
<Product ID="O365ProPlusRetail">
<Language ID="ja-jp" />
</Product>
</Add>
<Updates Enabled="TRUE" />
<Display Level="None" AcceptEULA="TRUE" />
</Configuration>
最後手段 ── 修復
- 快速修復 / 線上修復 對設定或註冊損毀有效
- 但無法解決 x86 / x64 不一致,或簽署 / 原則問題本身
- 修復要放在「最後」執行(若先執行會弄髒調查用的記錄)
指令速查表
| 目的 | 指令 |
|---|---|
| 以安全模式啟動 | excel /safe / winword /safe |
| 註冊 COM DLL | regsvr32 xxx.dll |
| 解除註冊 COM DLL | regsvr32 /u xxx.dll |
| 註冊 .NET COM(32bit Office) | Framework\v4.0.30319\RegAsm.exe xxx.dll /codebase /tlb |
| 註冊 .NET COM(64bit Office) | Framework64\v4.0.30319\RegAsm.exe xxx.dll /codebase /tlb |
| 備份登錄機碼 | reg export HKCU\... backup.reg /y |
| 啟用 Office 一般記錄 | reg add HKCU\Software\...\Logging /v EnableLogging /t REG_DWORD /d 1 |
| 啟用 Click-to-Run 詳細記錄 | reg add HKLM\SOFTWARE\...\OverRide /v LogLevel /t REG_DWORD /d 3 |
| 啟動事件檢視器 | eventvwr.msc |
總結 ── 別搞錯排查順序
設定錯誤 → OS / bitness 不一致 → COM 實體問題 → 相依關係 → 更新差異
ActiveX 的問題乍看只是「Excel 的問題」,實際上是 Office 的預設安全性 + Windows 的支援前提 + COM 實體註冊 + 相依執行階段 + 更新模式 這 5 層交錯而成的問題。與其貿然放寬設定,依序由上往下排查,才能得到不易再發的修復方式。
參考連結
- ActiveX controls are disabled by default in Microsoft 365 and Office 2024 ─ 預設停用的影響範圍
- Enable or disable ActiveX settings in Office files ─ 最貼近使用者操作的資料
- Update history for Office LTSC 2024 and Office 2024 ─ 組建比較、更新前後差異
- Overview of update channels for Microsoft 365 Apps ─ Current / Monthly Enterprise / Semi-Annual 的差異
- Release Information for Updates to Microsoft 365 Apps ─ 頻道造成的行為差異
- Compatibility between the 32-bit and 64-bit versions of Office ─ 涉及 ActiveX / COM 資產時的判斷依據
- Microsoft Edge 的 Internet Explorer 模式 ─ Enterprise Site List 與原則
- regsvr32 指令 ─ 原生 COM 的註冊 / 解除註冊
- Regasm.exe(組件註冊工具) ─ .NET 製作 COM 的註冊
- Process Monitor (Procmon) ─ 追蹤 NAME NOT FOUND / PATH NOT FOUND
- Process Explorer ─ 處理程序的 DLL 載入狀態
- Latest supported Visual C++ Redistributable Downloads ─ VC++ 執行階段不足的確認來源
- .NET Framework 安裝指南 ─ 確認 .NET Framework 版本
相關文章
共用相同標籤的最新文章。能以相近的主題延伸理解。
委外・委託開發 Windows 應用程式前該整理的事項
在委外・委託開發 Windows 應用程式之前,整理既有軟體改版、設備整合、COM/ActiveX、發布與更新、維護等應留意的重點。
開發 COM 元件、OCX/ActiveX 時常見的坑 - 整理 Visual Studio 的 32bit/64bit、註冊、管理員權限
整理開發 COM、OCX、ActiveX 元件時最容易卡關的四個面向:宿主行程的 32bit/64bit、Visual Studio 2022 變成 64bit 後的設計時整合、regsvr32 與 Regasm 的註冊位置、以及管理員權限與 HKCU/HKLM 的關係,協...
開發者的奇愛,或者我如何學會停止憂慮並愛上Windows
Windows很麻煩。但這種麻煩,正是因為它是一個長年背負著現實業務的作業系統才會有的麻煩。
為 VBScript 停用做準備:VBA・企業內部工具盤點指南
本文整理 VBScript 分階段停用前,VBA、Excel 巨集與企業內部工具的資產盤點、靜態偵測、執行紀錄蒐集、替代技術選型、測試與分階段導入的做法。
從 32bit 應用呼叫 64bit DLL 的方法 - COM 橋接有用的案例研究
本篇整理 Windows 上想從 32bit 應用呼叫 64bit DLL 時的限制與實務做法,介紹用 Out-of-proc COM(EXE 伺服器)將 64bit 處理切到另一個行程的橋接思路,並附上序列圖、註冊與 marshalling 的注意點,以及 GitHub ...
相關主題
與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。
Windows 技術主題
彙整 KomuraSoft LLC 關於 Windows 開發、故障調查與既有資產活用文章的主題中心。
ActiveX 遷移
整理保留、包裝或替換 COM / ActiveX / OCX 資產的階段性判斷的主題頁面。
32 位元 / 64 位元互通
整理 32 位元 / 64 位元互通、原生邊界與相關 Windows 設計判斷的主題頁面。
與本主題相關的服務
本文連結到以下服務頁面,歡迎從最接近的入口查看。
Windows 應用程式開發
支援包含常駐處理、設備連動、運作日誌與可維護結構的 Windows 桌面應用程式。
既有資產活用 & 遷移支援
在持續活用 COM / ActiveX / OCX 資產、原生程式碼與 32 位元相依的同時,協助規劃階段性的遷移。
常見問題
整理諮詢這個主題時常見的問題。
- Office 2024 或 Microsoft 365 中 ActiveX 預設被停用是什麼意思?
- Office 2024 與 Microsoft 365 中,ActiveX 控制項預設處於停用狀態。以前正常運作的 Excel 按鈕、表單,或 Word / PowerPoint 中的嵌入物件,在更新後突然「無法運作」,多半不是程式故障,而是這項安全性預設值變更所致。開啟檔案時出現的黃色訊息列中選擇[啟用內容],看看是否能暫時運作,並檢查 Trust Center(信任中心)的 ActiveX 設定,是第一步該做的事。
- Office 更新後,Excel 的 ActiveX 按鈕變得沒有反應。應該先檢查什麼?
- 原因大致可分成 3 類:第一是安全性設定變化(Trust Center、ActiveX 預設停用、保護模式檢視),第二是 32bit / 64bit 不一致(在 64bit Office 上載入僅支援 32bit 的控制項),第三是 COM 註冊或相依 DLL / 執行階段不足(未執行 regsvr32、缺少 VC++ 執行階段)。依照這個順序從上往下排查最快。同時,一開始就要先記錄產品名稱、組建編號、Office 的 bitness、OS 資訊,並避免直接從網路共用或郵件附件開啟,改用本機資料夾比對重現差異。
- 為什麼只有在 64bit Office 上 ActiveX 控制項無法運作?
- 因為 Office 的 bitness 與 COM / ActiveX 的 bitness 必須一致。在 64bit Office 上載入僅支援 32bit 的控制項不會運作。請向廠商確認是否有 x64 版本,若沒有則考慮切換到 Office 32bit。若是 .NET 製作的 COM,要用 RegAsm 而不是 regsvr32,32bit Office 用 Framework、64bit Office 用 Framework64 的 RegAsm 註冊。若 RegAsm 的 bitness 與 Office 不一致,就會出現登錄機碼上顯示註冊成功、但 Office 卻找不到的典型事故。
- 要讓 ActiveX 能永久使用,應該怎麼設定?
- 基本原則不是全面降低安全性,而是只針對必要的對象做有限度的允許。DisableAllActiveX 這項登錄機碼變更純粹是驗證用,永久對策要靠可信賴的散布途徑與簽署來完成。具體來說,替自家散布的 ActiveX / 巨集 / 附加元件進行程式碼簽署並集中管理 Trusted Publisher,Microsoft 365 可考慮採用變更較容易掌握的每月企業版頻道,除非廠商明確表示支援 x64,否則優先考慮 Office 32bit。正式散布前應建立 pilot ring,以具代表性的表單與裝置固定組建版本進行驗證。
作者檔案
本文作者的個人檔案頁面。
Go Komura
小村軟體有限公司 代表
以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。