將 Excel VBA 巨集遷移到 Power Automate ── 用 Office Scripts 取代的範圍,與該保留 VBA 的範圍

· · Power Automate, VBA, Excel, Office, Office Scripts, 業務自動化, 雲端流程, 既有資產活用, 遷移, 技術諮詢

「這項業務是用 Excel 巨集在跑的,但寫的人已經不在公司了。這可以遷移到所謂的 Power Automate 嗎?」──我常常收到這樣的諮詢。用 VBA 寫成的每日彙總或報表製作仍在現役運作,另一方面,也有不少負責人因為作者離職或 VBScript 停用的消息,而對 VBA 資產的未來感到不安。

先講結論:「把 VBA 遷移到 Power Automate」,正確來說是「把 VBA 的一部分改寫成 Office Scripts 從 Power Automate 呼叫」「一部分用連接器取代」「一部分保留為 VBA」這幾件事的組合。並不存在能把 VBA 巨集原封不動放到雲端流程上執行的機制。本文將依據 Microsoft Learn 的一手資訊,整理哪些處理可以遷移到哪裡、哪些應該保留為 VBA。

1. 先講結論

  • 無法從 Power Automate 的雲端流程直接執行 VBA 巨集。 Excel Online (Business) 連接器可以處理 .xlsm 檔案,但無法執行其中的巨集,能執行的只有 Office Scripts。1
  • Office Scripts 並非 VBA 的完全替代品。 它專用於 Excel,無法操作其他 Office 應用程式、無法使用事件驅動、UserForm、COM/OLE 連結,也無法存取本機檔案。23
  • 反過來說,能在活頁簿內完成的整理・彙總・轉錄處理,改寫成 Office Scripts 的價值很大。搭配 Power Automate,就能以排程啟動或收到郵件為觸發自動執行,實現 VBA 做不到的「不開啟 Excel 也能運作的自動化」。2
  • 如果只是對表格新增・取得列這種程度的處理,不必寫腳本,也能直接用 Excel Online (Business) 連接器的動作處理。但請先確認必須是表格、預設 256 列、最大 25MB 等限制。4
  • 對於無論如何都需要 VBA 的處理,還有一個選項是用桌面流程的 Run Excel macro 動作直接啟動既有的 VBA。可以在不改寫 VBA 的情況下,只自動化啟動與前後的串接。5
  • Office Scripts 需要商用或教育版的 Microsoft 365 授權,以及 OneDrive for Business。VBA 不需要額外授權,這一點會成為遷移判斷的前提條件。62

2. 整理 VBA、Office Scripts、Power Automate 的關係

首先整理一下登場的角色。相似的名稱很多,這正是混淆的根源。

桌面側雲端側Run script新增/取得/更新列Run Excel macro呼叫Power Automate桌面流程既有 VBA 巨集Power Automate雲端流程Excel Online Business連接器Office Scripts用 TypeScript 操作 ExcelExcel 表格OneDrive / SharePoint 上的活頁簿本機/檔案伺服器上的活頁簿
  • Office Scripts是用 TypeScript 操作 Excel 的腳本功能。可在 Excel 的網頁版・Windows 版(2210 版以後)・Mac 版上運作,並能從 Power Automate 的雲端流程呼叫。與 VBA 根本的差異在於,VBA 是為桌面設計的,而 Office Scripts 則是為雲端、跨平台而設計的。26
  • Excel Online (Business) 連接器是從雲端流程操作 OneDrive for Business 或 SharePoint 上的 Excel 檔案的連接器。它具備對表格進行列操作的動作,以及執行 Office Scripts 的「執行腳本 (Run script)」動作。7
  • 桌面流程(Power Automate for desktop)是操作 Windows 上應用程式的 RPA。Excel 動作群組中,有一個用來執行 VBA 巨集的動作。5

VBA 做得到、但 Office Scripts 做不到的事

在遷移判斷中,這裡是最重要的部分。以下依據 Microsoft Learn 的「Differences between Office Scripts and VBA macros」整理。2

VBA 做得到的事 Office Scripts 的處理方式
操作 Word、Outlook、Access 等 Excel 以外的 Office 應用程式 不可。Office Scripts 專用於 Excel,無法用於其他 Office 應用程式
透過 COM / OLE 與其他應用程式・外部元件連結、呼叫 Win32 API(Declare) 不可。腳本只能存取活頁簿,無法存取主機環境
Workbook_Open、Worksheet_Change 等事件驅動 不可。不支援 Excel 層級的事件,執行方式只有手動執行或由 Power Automate 呼叫
用 UserForm 建立自訂對話方塊・輸入畫面 不可。若需要活頁簿以外的 UI(對話方塊或工作窗格),屬於 Office 增益集的範疇3
操作本機資料夾中的檔案(開啟・儲存・取得清單) 不可。超出活頁簿範圍的處理,要交給 Power Automate 端的連接器(OneDrive、SharePoint 等)進行
包含桌面版 Excel 特有功能在內、涵蓋範圍廣泛的 Excel 功能 部分不可。VBA 涵蓋的 Excel 功能範圍較廣,Office Scripts 的定位則是幾乎涵蓋網頁版 Excel 的使用情境

呼叫外部網頁服務這一點也需要注意。Office Scripts 本身支援有限度的外部呼叫,但透過 Power Automate 執行時,腳本內的外部 API 呼叫(fetch)會失敗。外部串接的設計方式,是交給流程端的連接器或 HTTP 動作進行,而不是寫在腳本裡面。26 不過,可呼叫任意 API 的通用 HTTP 動作屬於進階連接器(Premium connector),光靠 Microsoft 365 授權無法使用。8 如果串接對象的服務有提供標準連接器,應優先使用;若必須呼叫自訂 API,則要把進階授權的額外成本一併納入遷移判斷。

看到這份清單,想必有不少人會覺得「我們公司的巨集幾乎全部中招」。實際上,經年累月成長起來的 VBA 巨集,通常都理所當然地包含用 Outlook 寄送郵件、巡覽資料夾、用 UserForm 接收輸入等處理。不過,在放棄之前,請先試著把處理分解看看。如果是「從資料夾收集檔案、整理活頁簿、用郵件寄送」這樣的巨集,收集檔案與寄送郵件正是 Power Automate 連接器擅長的工作,只要把活頁簿整理的部分改成 Office Scripts,整體來看就能遷移──這樣的案例其實相當多。

改寫的樣貌 ── 用彙總巨集做對比

光用文字說明很難掌握兩者的距離感,這裡並排一個最精簡的例子。這是一段只做「把『銷售』工作表 C 欄(第 2 列以後)加總,寫到 E1」的處理。

用 VBA 會這樣寫。

Sub 銷售合計()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("銷售")

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

    Dim total As Double
    total = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow))

    ws.Range("E1").Value = total
End Sub

用 Office Scripts(TypeScript)寫同一件事,會像這樣。

function main(workbook: ExcelScript.Workbook): number {
  const sheet = workbook.getWorksheet("銷售");
  const used = sheet.getUsedRange();

  // getRowIndex 從 0 開始,所以加上列數後就會變成從 1 開始的最後一列
  const lastRow = used.getRowIndex() + used.getRowCount();
  const values = sheet.getRange(`C2:C${lastRow}`).getValues();

  let total = 0;
  for (const row of values) {
    const v = row[0];
    if (typeof v === "number") {
      total += v;
    }
  }

  sheet.getRange("E1").setValue(total);
  return total; // 流程端可以接收到的回傳值
}

行數雖然變多了,但真正卡關的不是語法,而是接下來這 4 個思維方式的差異。

VBA 的直覺 在 Office Scripts 中
Sub 可以建立任意數量,從哪一個開始執行都可以 入口只有一個 main 函式,呼叫的一定是它
可以用 ActiveSheetSelection 隱含地使用「目前正在看的位置」 沒有選取狀態這個概念。一定要像 workbook.getWorksheet("銷售") 這樣用名稱取得
可以用 Application.WorksheetFunction 借用工作表函式 不能借用。要把值以陣列取出,自己計算
結果寫入儲存格,或用 MsgBox 顯示 可以用 return 把值傳回流程。通知或寄送郵件由流程端的連接器負責

getValues() 回傳的是 (string | number | boolean)[][] 這種二維陣列,儲存格內容有時會是字串。VBA 的 Sum 曾經默默幫忙跳過的非數值資料,現在要自己用 typeof 篩掉──這種「原本隱含幫你做好的事,變成要明確自己處理」的感覺,是改寫時體感差異的主要來源。

還有一點,在 Office Scripts 中,基本做法不是逐一讀寫儲存格,而是以範圍為單位整批取得後用陣列處理。VBA 也有逐格迴圈速度較慢的說法,但在 Office Scripts 中,這會直接影響到要求・回應的大小上限與執行時間限制(第 4 章)。

3. 判斷表 ── 依使用情境區分運用 5 個選項

遷移的選項不只「改寫成 Office Scripts」一種。實務上會依下列 5 個選項來思考。

選項 適合的情境 前提・限制
(1) 保留 VBA 個人・小型團隊的手邊作業。本質上需要 UserForm、事件、與其他應用程式連結,且由負責人在執行時在場的運作方式沒有困擾 不需額外授權。2但屬人化、管理外巨集的風險要靠盤點來因應
(2) 改寫成 Office Scripts,從雲端流程執行 在活頁簿內就能完成的整理・彙總・轉錄。想以排程啟動或收到郵件・表單為觸發。活頁簿可以放在 OneDrive / SharePoint 需要商用/教育版 Microsoft 365 授權。6事件、UserForm 等需要重新設計
(3) 用 Excel Online (Business) 連接器直接處理 只需要對表格新增・取得・更新・刪除列的單純處理。例如「把表單的回覆附加到 Excel」等 前提是目標範圍已建立為表格。有預設 256 列、最大 25MB 等限制4
(4) 用桌面流程直接啟動既有 VBA 沒有餘力改寫 VBA,但想只自動化啟動與前後處理(檔案配置、通知)。活頁簿放在公司內部檔案伺服器上 需要 Windows 機器。從雲端流程啟動時,需要連線擁有者的 Power Automate Premium 授權(無人執行則需要 Process 授權)910
(5) 用 .NET 重新開發 大量資料處理、複雜的業務邏輯、必須有自動測試或 Git 版本管理、以報表產出為主要目的 開發成本最高。但長期可維護性・效能也最高。報表可以用 Open XML 等方式做到不依賴 Excel

該選哪一個,大致可以依下面這個流程決定。

不能操作其他應用程式 UI/COM 連結能放能完成有格式/多工作表/邏輯不能放僅限公司內部伺服器沒有有/需要效能・測試選一個 VBA 巨集處理是否在活頁簿內完結?Excel 以外的部分能否用連接器取代?寄送郵件、收集檔案等分解處理:Excel 部分→Office Scripts其餘→流程的連接器是否有餘力改寫 VBA?活頁簿能否放在OneDrive/SharePoint?只靠表格的列操作就能完成嗎?用 Excel Online Business連接器直接處理改寫成 Office Scripts用 Run script 執行用桌面流程直接啟動 VBA用 .NET 重新開發

要注意的是,(4) 並非「遷移的終點」,而是延命對策。VBA 本體的屬人化與版本管理課題仍會原封不動地留下來。即便如此,作為「先自動化啟動、消除人工執行的失誤,同時把 VBA 的內容分階段遷移到 Office Scripts 或 .NET」的緩衝時間,這個做法仍然相當實用。

4. 實作模式 ── Run script 動作與連接器的限制值

執行腳本 (Run script)

要從雲端流程執行 Office Scripts,需要使用 Excel Online (Business) 連接器的兩個動作。Run script 用於 OneDrive(預設儲存位置)中的腳本,Run script from SharePoint library 用於儲存在團隊 SharePoint 文件庫的腳本。7

典型的組成如下。

  1. 觸發器:排程(Recurrence)、收到郵件、表單送出等
  2. 用 OneDrive / SharePoint 連接器指定目標活頁簿
  3. 用 Run script 執行 Office Scripts,接收回傳值
  4. 用回傳值進行 Teams 通知或寄送郵件

腳本可以接收參數並回傳值,因此能做到「從流程傳入搜尋鍵,取回活頁簿內對應的資料,再由流程端寄送郵件」這類資料傳遞。另外,Excel 端原本具備的「腳本排程執行」功能,在本文撰寫時點(2026 年 7 月)已被暫時停用,官方建議改用 Power Automate 的流程來組排程執行。11

記錄、修改、組進流程

不需要從零開始寫 TypeScript。可以採取跟 VBA 巨集記錄相同的「先記錄再修改」做法。實際步驟如下。12

  1. 記錄。 在 Excel(網頁版或 Windows 版)中開啟目標活頁簿,從功能區的「自動化 (Automate)」索引標籤選擇「新增腳本 (New Script)」>「從記錄建立 (Create from Recording)」,把平常的操作照做一輪後停止。如果找不到「自動化」索引標籤,請確認功能區的溢出選單(向下箭頭)。如果還是沒有,就代表未滿足授權或平台條件(第 5 章)。
  2. 閱讀內容。 記錄結束後會開啟詳細窗格,用「編輯 (Edit)」開啟程式碼編輯器。在這裡可以看到自己的操作對應到哪些 getRangesetValue 呼叫。跟 VBA 的巨集記錄一樣,出來的是只把操作結果依序排列的程式碼
  3. 修改。 因為能記錄的只有操作本身,條件分支、迴圈、工作表名稱的接收方式都要自己補上。剛記錄完的程式碼,很多時候是用 getActiveWorksheet 抓取「目前開啟的工作表」,若從流程無人執行,就會誤打到非預期的工作表。把這裡改成像 getWorksheet("銷售") 這樣用名稱取得,是最先該做的修改。
  4. 組進流程。 腳本會儲存在 OneDrive(或 SharePoint 文件庫),因此在雲端流程端新增「執行腳本 (Run script)」動作,選擇活頁簿與已儲存的腳本即可。只要在腳本的 main 加上參數,動作的輸入欄位就會隨之增加,就能從流程傳入值。

把「記錄→修改→組進流程」這一套流程完整走過一遍,會比光看判斷表更快理解。先拿遷移對象中最單純的巨集實際做一次,能提升第 3 章分類的準確度。

先確認限制值

從 VBA 遷移時最容易踩到的陷阱,是雲端執行特有的限制值。桌面版 VBA 實質上不存在的上限,在這裡是明確存在的。

不需要把清單全部背下來。依實務上會碰到的順序,最先該確認的限制有以下 3 個

  1. 同步處理的 120 秒逾時。「在 VBA 需要 3 分鐘的彙總」如果原封不動搬過來就會失敗。遷移前請先實測一次現行巨集所需的時間。這是最先、也最常碰到的一點。
  2. 單次要求・回應的 5MB。「用 getValues 取整張工作表」這種寫法,在列數多的活頁簿上很容易超過限制。需要設計成只取所需的欄・列,或是分批處理。
  3. 連接器可處理的檔案大小 25MB。 這一點無法靠寫法迴避。如果活頁簿本身就超過 25MB,雲端側的選項在那個時間點就已經不成立,只能改走桌面流程或 .NET。

反過來說,如果「1 分鐘內能結束」「處理的是數千列」「活頁簿只有幾 MB」,下面這張表幾乎不用在意,可以直接往前推進。

限制 出處
Office Scripts 單次要求・回應的大小 最大 5MB 6
單一範圍(Range)的儲存格數 最大 500 萬格 6
Run script 呼叫次數 每位使用者每天 1,600 次,且每 10 秒最多 3 次 64
同步處理的逾時 120 秒 6
傳給 Run script 的參數大小 最大 30,000,000 位元組(約 28.6MB) 6
連接器可處理的 Excel 檔案大小 最大 25MB 4
連接器的單次要求大小 最大 5MB 4
連接器的 API 呼叫 每個連線每 60 秒最多 100 次 4

用 Excel Online (Business) 連接器直接操作表格時,還請確認以下幾點。4

  • 列操作以表格為前提。「新增列 (Add a row into a table)」「取得列 (Get a row)」等動作,設計上是要指定表格(ListObject),單純寫在儲存格範圍中的資料無法作為對象。VBA 時代那種「從 A1 儲存格隨意開始寫的工作表」,在遷移前需要先建立為表格。
  • List rows present in a table 預設只會回傳最多 256 列。要取得全部列,需要啟用分頁設定。可取得的欄位預設也只到最前面的 500 欄。
  • 寫入的反映最多可能延遲約 30 秒。此外,使用連接器後的檔案有時會被鎖定最長 6 分鐘。
  • 不支援多個用戶端同時寫入。用流程去寫入一個在桌面版 Excel 中一直開著的活頁簿,這類運作方式會造成衝突或資料不一致。
  • 支援的格式是 .xlsx 與 .xlsb(二進位活頁簿)。.xlsm 只能在 Run script 動作中透過檔案瀏覽器選取,在其他動作中使用則需要指定檔案 ID。不過如前所述,其中的 VBA 巨集不會被執行。包含 ActiveX 控制項或表單控制項的 .xlsm,在連接器上有時無法正常運作,因此事前驗證是必要的。1

如果把「每晚彙總數十萬列的巨集」直接改寫成 Office Scripts,會正面撞上 5MB 限制與 120 秒逾時。這種規模,一開始就分派給 .NET(選項 5)會比較健全。

用桌面流程啟動 VBA

若保留 VBA,可以用桌面流程的 Launch Excel 開啟活頁簿,再用 Run Excel macro 動作指定巨集名稱(引數以分號分隔)來執行。若要使用個人巨集活頁簿(PERSONAL.XLSB)中的巨集,需要在 Launch Excel 的詳細設定中啟用「巢狀於新 Excel 處理程序下 (Nest under a new Excel process)」與「載入增益集與巨集 (Load add-ins and macros)」。5

要從雲端流程啟動桌面流程,需要註冊機器並建立桌面流程連線;有人執行時,連線擁有者需要 Power Automate Premium 使用者授權;無人執行時,機器需要 Power Automate Process 授權(或舊版 Unattended RPA 附加元件)。910錯誤處理、無人執行的前提條件等桌面流程整體的設計,在另一篇文章「用 Power Automate 自動化業務 ── 雲端流程與桌面流程的分工,以及錯誤處理設計」中有詳細說明。

5. 授權與前提條件

Office Scripts 並不是「Excel 附帶的免費功能」,這一點應該在遷移判斷的早期階段就先確認清楚。

  • 使用・建立 Office Scripts,需要商用或教育版的 Microsoft 365 訂閱授權(Office 365 Business / Business Premium / ProPlus / ProPlus for Devices / A3 / A5 / E1 / E3 / E5 / F3)與OneDrive for Business。啟用組織內共用連結,以及已啟用連線體驗的網際網路連線,也是前提條件。6
  • 從 Power Automate 使用 Office Scripts 時,同樣需要 Microsoft 365 的商用授權。E1 與 F3 可以透過 Power Automate 執行腳本,但無法使用 Excel 內的 Power Automate 整合(例如 Excel 的「自動化工作」功能等)。7
  • 在個人・家用版 Microsoft 365 上使用 Office Scripts,在本文撰寫時點(2026 年 7 月)仍處於預覽階段,需要加入 Microsoft 365 Insider 計畫。無法作為業務用途的前提。6
  • 用戶端方面,可在 Excel on the web、Excel for Windows(2210 版以後)、Excel for Mac 上運作。6
  • 另一方面,VBA 內建於桌面版 Excel,不需要特別的授權2

以上的授權條件是本文撰寫時點(2026 年 7 月)的內容。適用方案與前提條件會有所修訂,請在導入判斷前,透過腳註中的 Microsoft Learn 確認最新條件。

也就是說,在「公司內部使用的 Excel 是永久授權版(買斷版),未訂閱 Microsoft 365」的環境中,Office Scripts 這個選項一開始就不存在。這種情況下,遷移方向就只剩透過桌面流程自動化啟動,或用 .NET 重新開發。

安全性方面的差異也值得掌握。VBA 巨集以與 Excel 相同的權限運作,因此可以存取整個桌面環境,但 Office Scripts 能存取的只有活頁簿,登入使用者的驗證權杖也不會傳給腳本。管理員可以依租用戶或群組為單位,控管是否可使用 Office Scripts,以及是否可在 Power Automate 中使用。對於一直為巨集的安全性管理所苦的資訊人員來說,這種易於統一治理的特性,是遷移的優點之一。2

6. 遷移的進行方式 ── 盤點、分類、分階段遷移

實際的遷移,建議依下列 3 個階段來進行。

第 1 階段:盤點。 把哪些活頁簿有哪些巨集、由誰管理運作,整理成清單。這一步可以套用與 VBScript 停用因應相同的步驟,具體做法請參考另一篇文章「為 VBScript 停用做準備:VBA・企業內部工具盤點指南」。通常在盤點階段就會發現 2~3 成「已經沒有人在用的巨集」,光是把它們排除在遷移對象之外,就能減少工作量。

第 2 階段:分類。 把留下來的巨集套用到第 3 章的判斷表。這時的訣竅是,不要以巨集為單位,而是以處理為單位來分解。「收集檔案→整理→寄送郵件」的巨集,可以分解成 (3) 連接器 + (2) Office Scripts + 郵件連接器的組合。即使分解後仍殘留 VBA 依賴的部分(UserForm 的對話式輸入、操作其他應用程式的 COM 等),才會是 (1) 保留原狀或 (4) 透過桌面流程的候選對象。

第 3 階段:分階段遷移。 不要一開始就把所有巨集全部改寫,而是要排定優先順序。

  1. 執行頻率高、能在活頁簿內完結的項目著手。遷移效果較大,也適合用來熟悉 Office Scripts。VBA 與 TypeScript 雖然語言不同,但 Office Scripts 也有操作記錄功能(Action Recorder),可以用跟 VBA 巨集記錄相同的感覺做出草稿。2
  2. 讓遷移後的流程並行運作,設一段期間,把結果與 VBA 版本互相比對。表格化或日期格式差異造成的落差,就在這個階段找出來。
  3. 決定保留為 VBA 的部分,要「有管理地保留」。明確訂出執行手順書與負責人,若可能,盡量改用桌面流程啟動並留下執行紀錄。

關於 VBA 整體的未來走向,以及原本就適合繼續使用 VBA 的場景該怎麼想,整理在「什麼是 VBA - 限制、未來走向、該被取代的情境與務實的遷移模式」;把報表產出改交給 .NET 時的方式比較,整理在「Excel 報表輸出該怎麼做 - COM 自動化 / Open XML / 範本方式的判斷表」。另外,如果選擇用 .NET 透過 COM 操作 Excel 的架構,會有處理程序殘留這種經典問題,請一併參考「C# 操作 Excel 時 EXCEL.EXE 殘留的問題 ── COM 參照釋放模式與替換判斷」。

7. 總結

對於「VBA 能不能遷移到 Power Automate」這個問題,答案是「無法把巨集整支搬過去,但只要把處理分解,大部分都找得到遷移的去處」。

在活頁簿內就能完成的處理,改寫成 Office Scripts 從雲端流程呼叫;單純的列操作直接交給連接器;牽涉到其他應用程式串接或 UserForm 的部分,保留為 VBA 或透過桌面流程延命;大量資料或複雜邏輯則分派給 .NET。只要一開始先做好這樣的分類,遷移就不必一口氣做完,可以從頻率高的巨集開始,一點一點依序推進。

反過來說,如果不做分類就直接以「全部改寫成 Office Scripts」為目標開始,就會接連撞上事件與 UserForm 的高牆、5MB/120 秒的限制、必須是表格的限制而擱淺。遷移能否成功,與其說取決於改寫的功力,不如說幾乎是由著手前的盤點與分類決定的。與其把 VBA 資產當成「總有一天要丟棄的東西」,不如當成「分類後善加利用的東西」,這樣做終究是最省成本的。

相關文章

相關諮詢領域

合同會社小村軟體提供從盤點以 Excel / VBA 運作的既有業務,到 Power Automate・Office Scripts・.NET 分階段遷移設計,以善用既有資產為前提的諮詢服務。

參考連結

  1. Microsoft Learn, How to use macro-enabled files in Power Automate flows。關於 .xlsm 檔案內的巨集無法從 Power Automate 執行、只有 Office Scripts 有效,只有 Run script 動作能在檔案瀏覽器中選取 .xlsm,以及包含 ActiveX/表單控制項的檔案有時無法運作。  2

  2. Microsoft Learn, Differences between Office Scripts and VBA macros。關於 Office Scripts 專用於 Excel 且只能存取活頁簿、不支援事件、COM/OLE 僅限 VBA、Office Scripts 需要商用/教育授權而 VBA 標準內建於桌面版 Excel,以及操作記錄・安全性統管方面的差異。  2 3 4 5 6 7 8 9 10

  3. Microsoft Learn, Differences between Office Scripts and Office Add-ins。關於 Office Scripts 只能與活頁簿互動,若需要對話方塊或自訂 UI 控制項,則需要用到 Office 增益集。  2

  4. Microsoft Learn, Excel Online (Business) - Connectors reference。關於最大檔案大小 25MB、單次要求 5MB、List rows 預設 256 列與分頁、取得欄位預設上限 500 欄、Run script 每 10 秒 3 次・每天 1,600 次的限制、最後使用後最長 6 分鐘的檔案鎖定、寫入反映最多延遲 30 秒、每個連線每 60 秒 100 次的節流、不支援同時編輯,以及支援的檔案格式。  2 3 4 5 6 7

  5. Microsoft Learn, Run macros on an Excel workbook。關於用桌面流程的 Run Excel macro 動作執行 VBA 巨集,以及執行 PERSONAL.XLSB 中的巨集時需要 Launch Excel 的「Nest under a new Excel process」「Load add-ins and macros」選項。  2 3

  6. Microsoft Learn, Platform limits and requirements with Office Scripts。關於必要授權清單與 OneDrive for Business 要求、支援的平台(Excel on the web / Windows 版 2210 以後 / Mac)、要求・回應 5MB 限制、範圍 500 萬儲存格限制、Run script 每天 1,600 次限制、120 秒逾時、參數 30,000,000 位元組限制、透過 Power Automate 執行時外部 API 呼叫(fetch)會失敗、個人・家用版仍為預覽階段。  2 3 4 5 6 7 8 9 10 11 12

  7. Microsoft Learn, Run Office Scripts with Power Automate。關於 Run script / Run script from SharePoint library 這兩個動作、在 Power Automate 中使用 Office Scripts 需要 Microsoft 365 商用授權,以及 E1・F3 雖可從 Power Automate 執行但無法使用 Excel 內整合功能。  2 3

  8. Microsoft Learn, Guidance: Migrate from classic workflows to Power Automate flows in SharePoint。關於 Power Automate 的通用 HTTP 動作屬於進階連接器。 

  9. Microsoft Learn, Trigger desktop flows from cloud flows。關於從雲端流程啟動桌面流程的前提條件(已註冊的機器、桌面流程連線、依執行形態而定的授權)。  2

  10. Microsoft Learn, A failed license check on a desktop flow run。關於桌面流程的有人執行需要連線擁有者的 Power Automate Premium 使用者授權,無人執行則需要 Unattended RPA 附加元件或 Power Automate Process 授權。  2

  11. Microsoft Learn, Office Scripts in Excel。關於 Excel 的腳本排程功能已暫時停用,官方改為建議以 Power Automate 的流程進行排程執行(2026 年 7 月時點的記載)。 

  12. Microsoft Learn, Tutorial: Create and format an Excel table。關於在 Excel 的「Automate」索引標籤中,從「New Script」>「Create from Recording」記錄操作;找不到 Automate 索引標籤時要確認功能區溢出選單或平台要求;記錄後在詳細窗格用「Edit」開啟程式碼編輯器修改的「先記錄再編輯」做法。同一頁面也刊載了記錄後程式碼以 workbook.getActiveWorksheet() 取得工作表的範例。 

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

現有的 VBA 巨集可以直接從 Power Automate 執行嗎?
無法從雲端流程執行。Excel Online (Business) 連接器可以處理 .xlsm 檔案本身,但無法從 Power Automate 執行其中的巨集,能執行的只有 Office Scripts。另一方面,桌面流程(Power Automate for desktop)有 Run Excel macro 動作,可以直接執行用 Launch Excel 開啟的活頁簿中的 VBA 巨集。如果想在不修改 VBA 程式碼的情況下只自動化啟動這件事,透過桌面流程是現實可行的選項。
Office Scripts 可以完全取代 VBA 嗎?
不行。Office Scripts 專用於 Excel,無法操作 Word、Outlook 等其他 Office 應用程式。因為只能存取活頁簿,所以也無法處理本機檔案或 COM/OLE 連結,也沒有像 Workbook_Open 這樣的事件驅動,或用 UserForm 建立的自訂對話方塊。反過來說,只要是在活頁簿內就能完成的整理・彙總・轉錄之類的處理,就能改用 Office Scripts,並可從 Power Automate 排程執行或以事件觸發。與其說兩者是替代關係,不如說是守備範圍不同,這樣理解更準確。
使用 Office Scripts 需要什麼授權?
需要商用或教育版的 Microsoft 365 授權(Office 365 Business / Business Premium / ProPlus / E1 / E3 / E5 / F3 / A3 / A5)以及 OneDrive for Business。從 Power Automate 執行 Office Scripts 時,同樣需要 Microsoft 365 的商用授權,E1 與 F3 可以透過 Power Automate 執行,但無法使用 Excel 內的 Power Automate 整合功能。這與 VBA 標準內建於桌面版 Excel、不需額外授權形成對比,因此在做遷移判斷之前,需要先確認自家公司的授權狀況。
只靠 Excel Online (Business) 連接器就能完成自動化嗎?
單純的處理可以完成,但要注意限制很多。新增・取得・更新・刪除列的動作,前提是該範圍已建立為表格(ListObject),List rows present in a table 預設只會回傳最多 256 列,需要啟用分頁才能取得全部資料。檔案大小最大 25MB,單次要求最大 5MB,寫入的反映有時也會延遲最多 30 秒。實務上的分工是:對表格讀寫幾列資料就直接用連接器,牽涉儲存格格式或跨多張工作表的處理則交給 Office Scripts。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽