ترحيل ماكرو Excel VBA إلى Power Automate ── النطاق الذي يُستبدل بـ Office Scripts، والنطاق الذي يبقى على VBA

· آخر تحديث: · · Power Automate, VBA, Excel, Office, Office Scripts, أتمتة الأعمال, التدفقات السحابية, الاستفادة من الأصول القائمة, الترحيل, الاستشارات التقنية

سجل التعديلات (2 تحديثات، آخر تحديث 2 Sep، 2026)

سجل بالتغييرات التي أُجريت على هذا المقال. وحيثما حُفظت نسخة سابقة، تبقى متاحة للقراءة عبر رابط دائم يحمل معرّف DOI.

أُعيدَت الترجمة العربية كترجمة كاملة عن النص الياباني الأصلي، وأُضيفَت خريطة المعرفة.
أعيدت الترجمة كترجمة كاملة عن النص الياباني الأصلي. كانت النسخة العربية السابقة مختصراً يسقط أبواباً وجداول ورسوم Mermaid وتعليقات الأشكال وFAQ. أُعيدت هذه العناصر وفق الأصل الياباني، والادّعاءات التقنية مطابقة للنسخة اليابانية.
النشر الأول
الاستشهاد بهذا المقال(DOI: 10.5281/zenodo.21621761)

هذا المقال محفوظ على Zenodo. يرد أدناه معرّف DOI الذي يشير دائمًا إلى أحدث نسخة، ومعرّف DOI المثبَّت على النسخة التي تقرؤها.

غو كومورا (2026). ترحيل ماكرو Excel VBA إلى Power Automate ── النطاق الذي يُستبدل بـ Office Scripts، والنطاق الذي يبقى على VBA. شركة كومورا سوفت ذ.م.م.. https://doi.org/10.5281/zenodo.21621761 https://comcomponent.com/ar/blog/excel-vba-to-power-automate-office-scripts/

DOI (أحدث نسخة)
10.5281/zenodo.21621761
DOI (هذه النسخة)
10.5281/zenodo.22241067

«هذه العملية تعمل بماكرو Excel، لكن من كتبه لم يعد في الشركة. هل يمكن ترحيلها إلى ما يُسمى Power Automate؟» ── نتلقى هذا النوع من الاستفسارات كثيراً. فبينما ما زالت عمليات التجميع اليومي وإنشاء التقارير المبنية بـ VBA تعمل، يشعر كثير من المسؤولين بقلق إزاء مستقبل أصول VBA، بدافع من استقالة كاتب الكود أو أخبار إيقاف VBScript.

لنقلها منذ البداية: عبارة «ترحيل VBA إلى Power Automate» هي في الحقيقة مزيج من عدة أمور: «إعادة كتابة جزء من VBA كـ Office Scripts واستدعائه من Power Automate»، و«استبدال جزء آخر بالموصل (connector)»، و«الإبقاء على جزء ثالث كما هو في VBA». لا توجد آلية تشغّل ماكرو VBA كما هو داخل تدفق سحابي (cloud flow). في هذا المقال نرتب أي عملية يمكن ترحيلها وإلى أين، وأيها ينبغي أن يبقى في VBA، بالاستناد إلى المصادر الأولية من Microsoft Learn.

1. الخلاصة أولاً

  • لا يمكن تشغيل ماكرو VBA مباشرة من تدفق Power Automate السحابي. يستطيع موصل Excel Online (Business) التعامل مع ملف .xlsm، لكن لا يمكن تشغيل الماكرو الموجود بداخله، والشيء الوحيد القابل للتشغيل هو Office Scripts.1
  • Office Scripts ليس بديلاً كاملاً لـ VBA. فهو مخصّص لـ Excel فقط، ولا يدعم التحكم في تطبيقات Office الأخرى، ولا الأحداث (event-driven)، ولا UserForm، ولا التكامل عبر COM/OLE، ولا الوصول إلى الملفات المحلية.23
  • وبالمقابل، العمليات التي تكتمل داخل المصنّف نفسه ── كالتنسيق والتجميع والترحيل بين الخلايا ── تستحق التحويل إلى Office Scripts. فبدمجها مع Power Automate يصبح بالإمكان التشغيل التلقائي وفق جدول زمني أو بإطلاقه عند استلام بريد إلكتروني، فتتحقق «أتمتة تعمل دون فتح Excel»، وهو أمر كان مستحيلاً في VBA.2
  • إن اقتصر الأمر على إضافة صفوف إلى جدول أو استرجاعها، يمكن معالجته مباشرة عبر إجراءات موصل Excel Online (Business) دون كتابة أي سكربت. لكن تحقق أولاً من القيود مثل ضرورة وجود جدول، والحد الافتراضي 256 صفاً، والحجم الأقصى 25 ميغابايت.4
  • بالنسبة للعمليات التي تحتاج إلى VBA حتماً، يوجد خيار تشغيل VBA القائم كما هو عبر إجراء Run Excel macro في تدفق سطح المكتب. يمكن أتمتة التشغيل والتكامل السابق واللاحق فقط، دون إعادة كتابة VBA.5
  • يتطلب Office Scripts ترخيص Microsoft 365 تجاري أو تعليمي وOneDrive for Business. بينما لا يحتاج VBA إلى ترخيص إضافي، ما يجعل هذه النقطة شرطاً مسبقاً لقرار الترحيل.62

في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 21، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle

2. تنظيم العلاقة بين VBA وOffice Scripts وPower Automate

لنرتب أولاً العناصر المعنية. الأسماء المتشابهة كثيرة، وهذا مصدر الالتباس.

جانب سطح المكتبالجانب السحابيRun scriptإضافة/استرجاع/تحديث الصفوفRun Excel macroاستدعاءPower Automateتدفق سطح المكتبماكرو VBA القائمPower Automateتدفق سحابيExcel Online BusinessالموصلOffice Scriptsأتمتة Excel بلغة TypeScriptجدول Excelمصنّف على OneDrive / SharePointمصنّف على محرك محلي / خادم ملفات
  • Office Scripts ميزة سكربت تتحكم في Excel عبر TypeScript. تعمل في نسخة الويب من Excel، ونسخة Windows (الإصدار 2210 فما بعده)، ونسخة Mac، ويمكن استدعاؤها من تدفق Power Automate السحابي. الفارق الجوهري مع VBA هو أن VBA مصمّم لسطح المكتب، بينما Office Scripts مصمّم للسحابة ومتعدد المنصات.26
  • موصل Excel Online (Business) موصل يتحكم في ملفات Excel الموجودة على OneDrive for Business أو SharePoint من خلال تدفق سحابي. يحتوي على إجراءات للتحكم في صفوف الجداول، وعلى إجراء «تشغيل السكربت (Run script)» الذي يشغّل Office Scripts.7
  • تدفق سطح المكتب (Power Automate for desktop) أداة RPA تتحكم في التطبيقات على Windows. ومن بين مجموعة إجراءات Excel يوجد إجراء لتشغيل ماكرو VBA.5

ما يمكن تنفيذه في VBA ولا يمكن في Office Scripts

هذا هو الجزء الأهم في قرار الترحيل. ننظمه بالاستناد إلى صفحة «Differences between Office Scripts and VBA macros» من Microsoft Learn.2

ما يمكن تنفيذه في VBA التعامل معه في Office Scripts
التحكم في تطبيقات Office غير Excel مثل Word وOutlook وAccess غير ممكن. Office Scripts مخصّص لـ Excel فقط، ولا يمكن استخدامه في تطبيقات Office الأخرى
التكامل مع تطبيقات ومكوّنات خارجية عبر COM / OLE، واستدعاء Win32 API (عبر Declare) غير ممكن. لا يصل السكربت إلا إلى المصنّف، ولا يصل إلى الجهاز المضيف
الأحداث (event-driven) مثل Workbook_Open وWorksheet_Change غير ممكن. أحداث مستوى Excel غير مدعومة، ووسيلة التشغيل تقتصر على التشغيل اليدوي أو الاستدعاء من Power Automate
نوافذ حوار وشاشات إدخال مخصّصة عبر UserForm غير ممكن. إن احتجت إلى واجهة مستخدم خارج المصنّف (نافذة حوار أو جزء عمل)، فهذا مجال Office Add-ins3
التعامل مع الملفات في مجلدات محلية (فتح، حفظ، استرجاع القائمة) غير ممكن. تُنجز العمليات التي تخرج عن نطاق المصنّف عبر موصلات Power Automate (مثل OneDrive وSharePoint)
مجموعة واسعة من ميزات Excel، بما فيها الميزات الخاصة بالنسخة المكتبية غير ممكن جزئياً. نطاق تغطية VBA لميزات Excel أوسع، بينما يغطي Office Scripts في الغالب سيناريوهات نسخة الويب من Excel

يلزم الانتباه أيضاً إلى استدعاء خدمات الويب الخارجية. يدعم Office Scripts نفسه استدعاءً خارجياً محدوداً، لكن عند التشغيل عبر Power Automate يفشل استدعاء واجهة API خارجية (fetch) من داخل السكربت. التصميم الصحيح هو تنفيذ التكامل الخارجي ليس من داخل السكربت، بل عبر موصل التدفق أو إجراء HTTP في التدفق نفسه.26 بيد أن إجراء HTTP العام الذي يستدعي أي واجهة API يُعامل بوصفه موصلاً متميزاً (premium)، فلا يمكن استخدامه بترخيص Microsoft 365 وحده.8 إذا توفّر موصل قياسي للخدمة المطلوب التكامل معها فأعطه الأولوية، وإن كان استدعاء واجهة API خاصة ضرورياً، فأدرج التكلفة الإضافية لترخيص premium ضمن قرار الترحيل.

لا شك أن كثيرين شعروا بعد قراءة هذه القائمة بأن «ماكرونا يقع في كل هذه القيود تقريباً». وبالفعل، عادة ما تتضمن ماكروهات 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; // フロー側で受け取れる戻り値
}

يزيد عدد الأسطر، لكن ما يعرقل ليس النحو بل اختلافات التفكير الأربعة التالية.

إحساس VBA في Office Scripts
يمكن إنشاء أي عدد من Sub، وتشغيل أي منها المدخل دالة main واحدة فقط. هي التي تُستدعى
يمكن استخدام ActiveSheet وSelection ضمناً لـ«الموضع الذي أنظر إليه الآن» لا مفهوم لحالة التحديد. خذ الورقة بالاسم دائماً مثل workbook.getWorksheet("売上")
يمكن استعارة دوال ورقة العمل عبر Application.WorksheetFunction لا استعارة. أخرج القيم كمصفوفة واحسب بنفسك
تُكتب النتيجة في خلية أو تُعرض بـ MsgBox يمكن إرجاع قيمة بـ return إلى التدفق. الإشعارات وإرسال البريد يتولاهما موصل التدفق

ما يعيده getValues() هو مصفوفة ثنائية (string | number | boolean)[][]، وقد يكون محتوى الخلية نصاً. القيم غير العددية التي كان Sum في VBA يتجاوزها صامتاً يلزم استبعادها بنفسك بـ typeof ── إحساس «ما كان يحدث ضمناً يصبح صريحاً» هو معظم فرق إعادة الكتابة.

نقطة أخرى: في Office Scripts لا تُقرأ الخلايا وتُكتب واحدة واحدة؛ الأساس هو أخذ نطاق دفعة ومعالجته كمصفوفة. حتى في VBA كانت حلقة الخلية بطيئة، لكن في Office Scripts يؤثّر ذلك مباشرة في حد حجم الطلب والاستجابة وحد زمن التنفيذ (الفصل 4).

3. جدول القرار ── التمييز بين خمسة خيارات حسب حالة الاستخدام

خيار الترحيل ليس مقصوراً على «التحويل إلى Office Scripts». في العمل الفعلي يُفكر بالخيارات الخمسة التالية.

الخيار الحالة المناسبة الشروط والقيود
(1) الإبقاء عليه في VBA العمل الفردي أو ضمن فريق صغير. الحالات التي يلزم فيها جوهرياً UserForm أو الأحداث أو التكامل مع تطبيقات أخرى، ولا مشكلة في أن يحضر المسؤول عند التشغيل لا حاجة إلى ترخيص إضافي.2 لكن يجب معالجة خطر الاعتمادية الشخصية والماكروهات غير المُدارة عبر الجرد
(2) التحويل إلى Office Scripts وتشغيله من تدفق سحابي عمليات التنسيق والتجميع والترحيل التي تكتمل داخل المصنّف. الرغبة في التشغيل حسب جدول زمني أو عند استلام بريد أو نموذج. إمكانية وضع المصنّف على OneDrive / SharePoint يلزم ترخيص Microsoft 365 تجاري / تعليمي.6 تتطلب الأحداث وUserForm ونحوها إعادة تصميم
(3) المعالجة المباشرة عبر موصل Excel Online (Business) العمليات البسيطة المقتصرة على إضافة صفوف إلى جدول أو استرجاعها أو تحديثها أو حذفها، مثل «إضافة إجابات نموذج إلى Excel» يفترض أن يكون النطاق المستهدف جدولاً. توجد قيود مثل 256 صفاً افتراضياً و25 ميغابايت كحد أقصى4
(4) تشغيل VBA القائم كما هو عبر تدفق سطح المكتب لا سعة لإعادة كتابة VBA، لكن يُراد أتمتة التشغيل والمعالجة السابقة / اللاحقة (وضع الملفات، الإشعارات) فقط. المصنّف موجود على خادم ملفات داخلي يلزم جهاز Windows. يتطلب التشغيل من تدفق سحابي ترخيص Power Automate Premium لصاحب الاتصال (وترخيص Process للتشغيل غير المراقب)910
(5) إعادة البناء بـ .NET معالجة كميات كبيرة من البيانات، منطق أعمال معقّد، ضرورة الاختبار الآلي وإدارة Git، الهدف الأساسي إنشاء تقارير تكلفة التطوير هي الأعلى. لكن قابلية الصيانة طويلة الأمد والأداء هما الأعلى أيضاً. يمكن جعل التقارير مستقلة عن Excel عبر Open XML ونحوه

يتحدد الخيار المناسب في الغالب وفق التدفق التالي.

لايمكنلا يمكنتحكم بواجهة تطبيق آخر / تكامل 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. المشغّل (trigger): جدول زمني (Recurrence)، استلام بريد إلكتروني، إرسال نموذج، إلخ
  2. تحديد المصنّف المستهدف عبر موصل OneDrive / SharePoint
  3. تشغيل Office Scripts عبر Run script واستلام القيمة المعادة
  4. استخدام القيمة المعادة لإرسال إشعار Teams أو بريد إلكتروني

بما أن السكربت يمكنه استقبال معطيات (parameters) وإعادة قيمة، يمكن تبادل البيانات بأسلوب «تمرير مفتاح بحث من التدفق، واسترجاع البيانات المطابقة داخل المصنّف، ثم تحويلها إلى بريد من جانب التدفق». كما أن ميزة «التشغيل المجدول للسكربت» التي كانت موجودة في Excel معطّلة مؤقتاً في وقت كتابة هذا المقال (يوليو 2026)، ويُوصى بدلاً منها ببناء التشغيل المجدول عبر تدفق Power Automate.11

سجّل، عدّل، ثم أدرج في التدفق

لا حاجة لكتابة TypeScript من الصفر. يمكن التقدم بأسلوب «سجّل ثم عدّل» نفسه المستخدم في تسجيل ماكرو VBA. الخطوات الفعلية كالتالي.12

  1. سجّل. افتح المصنّف المستهدف في Excel (نسخة الويب أو Windows)، ومن علامة تبويب «Automate» في الشريط اختر «New Script» ثم «Create from Recording»، ونفّذ العملية المعتادة دفعة واحدة ثم أوقف. إن لم تظهر علامة «Automate» تحقق من فيض الشريط (السهم إلى الأسفل). إن بقيت غائبة فشرط الترخيص أو المنصة غير متحقق (الفصل 5).
  2. اقرأ المحتوى. بعد انتهاء التسجيل تُفتح لوحة التفاصيل؛ افتح محرر الكود بـ «Edit». هنا يتضح أي استدعاءات getRange وsetValue نتجت عن عمليتك. كما في تسجيل ماكرو VBA، يخرج كود يصف نتائج العملية ببساطة.
  3. عدّل. التسجيل يلتقط العملية نفسها فقط، لذا تضيف بنفسك التفرع الشرطي والحلقات وطريقة استلام اسم الورقة. كود ما بعد التسجيل كثيراً ما يمسك «الورقة المفتوحة الآن» بـ getActiveWorksheet، فإن شُغّل بلا مراقبة من التدفق يصيب ورقة غير مقصودة. أول تعديل ينبغي فعله هو أخذ الورقة بالاسم مثل getWorksheet("売上").
  4. أدرج في التدفق. يُحفظ السكربت في OneDrive (أو مكتبة SharePoint)، فأضف إجراء «Run script» في التدفق السحابي واختر المصنّف والسكربت المحفوظ. إن أضفت معطيات إلى main في السكربت، تزيد حقول الإدخال في الإجراء بذلك القدر، ويمكن تمرير قيم من التدفق.

تجربة «تسجيل ← تعديل ← إدراج» مرة واحدة أسرع لفهم الأمر من التحديق في جدول القرار. نفّذها مرة على أبسط ماكرو ضمن نطاق الترحيل، فترتفع دقة تصنيف الفصل 3.

تحقق من القيم الحدية أولاً

أكبر مطب في الترحيل من VBA هو القيم الحدية الخاصة بالتنفيذ السحابي. فالحدود التي لم تكن موجودة فعلياً في VBA على سطح المكتب موجودة هنا بوضوح.

لا حاجة لحفظ القائمة كلها. القيود الثلاثة التي ينبغي التحقق منها أولاً، بترتيب الاصطدام في العمل، هي التالية.

  1. مهلة المعالجة المتزامنة 120 ثانية. «تجميع كان يستغرق 3 دقائق في VBA» يسقط إن نُقل كما هو. قبل الترحيل قِس زمن الماكرو الحالي مرة. هذا أول ما يُصطدم به، وأكثره تكراراً.
  2. 5 ميغابايت للطلب والاستجابة الواحدة. أسلوب «خذ الورقة كلها بـ getValues» يتجاوز الحد بسهولة في مصنّفات كثيرة الصفوف. يلزم تصميم يضيّق الأعمدة والصفوف اللازمة أو يقسّم المعالجة.
  3. حجم الملف الذي يستطيع الموصل التعامل معه 25 ميغابايت. هذا لا يُتجاوز بأسلوب الكتابة. إن تجاوز المصنّف نفسه 25 ميغابايت، تسقط خيارات الجانب السحابي في تلك اللحظة، ويبقى تدفق سطح المكتب أو .NET.

بعبارة معكوسة: إن كان «ينتهي في أقل من دقيقة» و«ما يُعالج آلاف الصفوف» و«المصنّف بضعة ميغابايت»، يمكن المضي دون الاكتراث تقريباً بالجدول التالي.

القيد القيمة المصدر
حجم الطلب / الاستجابة الواحد لـ Office Scripts 5 ميغابايت كحد أقصى 6
عدد خلايا نطاق (Range) واحد 5 ملايين خلية كحد أقصى 6
عدد مرات استدعاء Run script 1,600 مرة في اليوم لكل مستخدم، وبحد أقصى 3 مرات لكل 10 ثوان 64
مهلة المعالجة المتزامنة 120 ثانية 6
حجم المعطيات الممرَّرة إلى Run script 30,000,000 بايت كحد أقصى (نحو 28.6 ميغابايت) 6
حجم ملف Excel الذي يستطيع الموصل التعامل معه 25 ميغابايت كحد أقصى 4
حجم الطلب الواحد للموصل 5 ميغابايت كحد أقصى 4
استدعاءات واجهة API الخاصة بالموصل 100 مرة كل 60 ثانية لكل اتصال 4

عند التحكم المباشر في الجداول عبر موصل Excel Online (Business)، تحقق أيضاً من النقاط التالية.4

  • عمليات الصفوف تفترض وجود جدول. إجراءات مثل «إضافة صف (Add a row into a table)» و«استرجاع صف (Get a row)» مصمّمة لتحديد جدول (ListObject)، ولا يمكنها التعامل مع بيانات مكتوبة في نطاق خلايا عادية فقط. أما «الورقة التي بدأنا الكتابة فيها اعتباطاً من الخلية A1» في زمن VBA، فتحتاج إلى تحويلها إلى جدول قبل الترحيل.
  • لا يعيد List rows present in a table افتراضياً أكثر من 256 صفاً. لاسترجاع كل الصفوف، فعّل إعداد ترقيم الصفحات (pagination). كما أن عدد الأعمدة القابلة للاسترجاع محدود افتراضياً بأول 500 عمود.
  • قد يحدث تأخير يصل إلى نحو 30 ثانية في انعكاس الكتابة. كما قد يُقفل الملف لمدة تصل إلى 6 دقائق بعد استخدام الموصل.
  • الكتابة المتزامنة من عدة عملاء غير مدعومة. فتشغيل مثل الكتابة من التدفق إلى مصنّف مفتوح باستمرار في نسخة Excel المكتبية يسبب تعارضاً وعدم اتساق.
  • الصيغتان المدعومتان هما .xlsx و.xlsb (المصنّف الثنائي). لا يمكن اختيار .xlsm من متصفح الملفات إلا في إجراء Run script، ويتطلب استخدامه في إجراءات أخرى تحديد معرّف الملف. ومع ذلك، وكما ذُكر سابقاً، لا يُشغَّل ماكرو VBA الموجود بداخله. قد لا يعمل ملف .xlsm الذي يحتوي على عناصر تحكم ActiveX أو عناصر تحكم نموذجية (form controls) مع الموصل، لذا فإن الاختبار المسبق ضروري.1

إعادة كتابة «ماكرو يجمع مئات آلاف الصفوف كل ليلة» إلى Office Scripts كما هو تصطدم مباشرة بحد 5 ميغابايت ومهلة 120 ثانية. من الأسلم توجيه هذا الحجم من البداية إلى .NET (الخيار 5).

تشغيل VBA عبر تدفق سطح المكتب

عند الإبقاء على VBA كما هو، يُفتح المصنّف عبر Launch Excel في تدفق سطح المكتب، ثم يُنفَّذ عبر إجراء Run Excel macro بتحديد اسم الماكرو (تُفصل المعطيات بفاصلة منقوطة). وعند استخدام ماكرو من مصنّف الماكرو الشخصي (PERSONAL.XLSB)، يجب تفعيل «Nest under a new Excel process» و«Load add-ins and macros» في الإعدادات المتقدمة لـ Launch Excel.5

لتشغيل تدفق سطح المكتب من تدفق سحابي، يلزم تسجيل الجهاز واتصال تدفق سطح المكتب؛ ويحتاج التشغيل المراقب (attended) إلى ترخيص مستخدم Power Automate Premium لصاحب الاتصال، بينما يحتاج التشغيل غير المراقب (unattended) إلى ترخيص 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. كما يُشترط تفعيل روابط المشاركة داخل المؤسسة، واتصال بالإنترنت مع تفعيل التجارب المتصلة (connected experiences).6
  • يلزم ترخيص Microsoft 365 التجاري أيضاً عند استخدام Office Scripts من Power Automate. يستطيع E1 وF3 تشغيل السكربت عبر Power Automate، لكن لا يمكنهما استخدام تكامل Power Automate داخل Excel (كميزة «Automate a task» في Excel).7
  • يُعد Office Scripts في نسخة Microsoft 365 الشخصية / المنزلية، في وقت كتابة هذا المقال (يوليو 2026)، في مرحلة معاينة (preview)، ويتطلب الاشتراك في برنامج Microsoft 365 Insider. لا يصلح افتراضه أساساً للاستخدام في بيئة العمل.6
  • يعمل من جانب العميل في Excel on the web وExcel for Windows (الإصدار 2210 فما بعده) وExcel for Mac.6
  • في المقابل، VBA مضمَّن في النسخة المكتبية من Excel، ولا يحتاج إلى ترخيص خاص.2

شروط الترخيص أعلاه هي وقت كتابة هذا المقال (يوليو 2026). الخطط المستهدفة والشروط المسبقة تُراجع، لذا تحقق من أحدث الشروط في Microsoft Learn المشار إليه في الحواشي قبل قرار الإدخال.

بعبارة أخرى، في بيئة «Excel الداخلي نسخة ترخيص دائم (شراء لمرة واحدة)، ولا يوجد اشتراك في Microsoft 365»، لا يوجد أصلاً خيار اسمه Office Scripts. في هذه الحالة تقتصر وجهة الترحيل على أتمتة التشغيل عبر تدفق سطح المكتب أو إعادة البناء بـ .NET.

يستحق الفارق في الأمان الانتباه أيضاً. يعمل ماكرو VBA بنفس صلاحيات Excel، فيمكنه الوصول إلى سطح المكتب كله، بينما لا يستطيع Office Scripts الوصول إلا إلى المصنّف، ولا يُمرَّر رمز مصادقة المستخدم المسجّل دخوله إلى السكربت مطلقاً. يمكن للمسؤول التحكم في إمكانية استخدام Office Scripts، وإمكانية استخدامه عبر Power Automate، على مستوى المستأجر (tenant) أو المجموعة. بالنسبة لأقسام تقنية المعلومات التي عانت من إدارة أمان الماكروهات، تُعد سهولة هذا التحكم إحدى مزايا الترحيل.2

6. كيفية تنفيذ الترحيل ── الجرد، والتصنيف، والترحيل التدريجي

نوصي بتنفيذ الترحيل الفعلي عبر المراحل الثلاث التالية.

المرحلة الأولى: الجرد. يُعد سجل يوضح في أي مصنّف يعمل أي ماكرو، وتحت إدارة من. يمكن استخدام الخطوات نفسها المتبعة في الاستعداد لإيقاف VBScript، فراجع المقال الآخر «دليل المراجعة الشاملة لـ VBA وExcel macro والأدوات الداخلية استعداداً لإيقاف VBScript» للاطلاع على الطريقة التفصيلية. من المعتاد أن يُعثر عند الجرد على نسبة 20 إلى 30% من «الماكروهات التي لم تعد مستخدمة»، ومجرد استبعادها من نطاق الترحيل يقلل حجم العمل.

المرحلة الثانية: التصنيف. تُطبَّق الماكروهات المتبقية على جدول القرار في الفصل 3. والحيلة هنا هي تفكيك الماكرو حسب وحدة العملية لا حسب كل ماكرو ككتلة واحدة. فماكرو «جمع الملفات ← التنسيق ← إرسال البريد» يمكن تفكيكه إلى تركيبة من (3) الموصل + (2) Office Scripts + موصل البريد. والجزء الذي يبقى معتمداً على VBA حتى بعد التفكيك (كإدخال حواري عبر UserForm، أو التحكم في تطبيق آخر عبر COM) هو وحده المرشّح لخيار (1) الإبقاء عليه أو (4) عبر تدفق سطح المكتب.

المرحلة الثالثة: الترحيل التدريجي. لا تُعد كتابة جميع الماكروهات دفعة واحدة، بل رتّب الأولويات.

  1. ابدأ بما يُشغَّل بتواتر عال ويكتمل داخل المصنّف. فأثر الترحيل كبير، وهو مناسب أيضاً لاكتساب الخبرة في Office Scripts. صحيح أن VBA وTypeScript لغتان مختلفتان، لكن Office Scripts يملك أيضاً تسجيل العمليات (Action Recorder)، ما يتيح إنشاء مسودة أولية بنفس إحساس تسجيل ماكرو VBA.2
  2. شغّل التدفق المُرحَّل بالتوازي مع النسخة القديمة، وخصّص فترة لمطابقة النتائج مع نسخة VBA. الفروق الناتجة عن تحويل النطاق إلى جدول أو اختلاف صيغة التاريخ تُكتشف في هذه المرحلة.
  3. ما تقرّر الإبقاء عليه في VBA، «أبقه مُداراً». حدد دليل التشغيل والمسؤول بوضوح، واحرص إن أمكن على توجيهه نحو التشغيل عبر تدفق سطح المكتب للاحتفاظ بسجل التشغيل.

يمكن الاطلاع على مستقبل VBA عموماً، وطريقة التفكير في الحالات التي يصح فيها الاستمرار في استخدام VBA أصلاً، في «ما هو VBA: حدوده، آفاقه المستقبلية، متى يجب استبداله، وأنماط الترحيل العملية»، بينما تُلخص مقارنة الطرق في حال توجيه إنشاء التقارير نحو .NET في «كيفية إنشاء تقارير Excel - COM/Open XML/القوالب». وفي حال اختيار بنية تتحكم في Excel عبر COM من .NET، توجد مشكلة كلاسيكية تتمثل في بقاء العملية عالقة، لذا راجع أيضاً «مشكلة بقاء EXCEL.EXE عند التحكم في Excel من C# ── أنماط تحرير مرجع COM وقرار الاستبدال».

7. الخلاصة

الجواب على سؤال «هل يمكن الترحيل من VBA إلى Power Automate؟» هو: «لا يمكن نقل الماكرو ككتلة واحدة، لكن إذا فُككت العملية فإن معظمها يجد وجهة ترحيل».

العمليات التي تكتمل داخل المصنّف تُحوَّل إلى Office Scripts وتُستدعى من تدفق سحابي، والعمليات البسيطة على الصفوف تُوكل مباشرة إلى الموصل، والأجزاء المرتبطة بالتكامل مع تطبيقات أخرى أو بـ UserForm تُبقى في VBA أو تُمدَّد عبر تدفق سطح المكتب، وتُوجَّه البيانات الضخمة والمنطق المعقّد نحو .NET. بمجرد إنجاز هذا الفرز في البداية، لا حاجة إلى تنفيذ الترحيل دفعة واحدة، ويمكن التقدم فيه تدريجياً بدءاً من الماكروهات الأكثر تواتراً.

وبالمقابل، إذا بدأت دون فرز، بقرار «إعادة كتابة كل شيء إلى Office Scripts»، فستصطدم تباعاً بحاجز الأحداث وUserForm، وقيدَي 5 ميغابايت و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، وإمكانية اختيار .xlsm من متصفح الملفات في إجراء Run script فقط، واحتمال عدم عمل الملفات المحتوية على عناصر تحكم 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 يتفاعل مع المصنّف فقط، وأنه عند الحاجة إلى نوافذ حوار أو عناصر تحكم واجهة مستخدم خاصة يلزم استخدام Office Add-ins.  2

  4. Microsoft Learn, Excel Online (Business) - Connectors reference. حول الحجم الأقصى للملف 25 ميغابايت، وحجم الطلب الواحد 5 ميغابايت، وحد 256 صفاً الافتراضي لـ List rows وترقيم الصفحات، والحد الافتراضي 500 عمود للأعمدة المسترجعة، وحد Run script (3 مرات كل 10 ثوان و1,600 مرة يومياً)، وقفل الملف حتى 6 دقائق بعد آخر استخدام، وتأخير انعكاس الكتابة حتى 30 ثانية، وتقييد المعدل بـ 100 مرة كل 60 ثانية لكل اتصال، وعدم دعم التحرير المتزامن، وصيغ الملفات المدعومة.  2 3 4 5 6 7

  5. Microsoft Learn, Run macros on an Excel workbook. حول تشغيل ماكرو VBA عبر إجراء Run Excel macro في تدفق سطح المكتب، وحاجة تشغيل ماكرو PERSONAL.XLSB إلى خياري «Nest under a new Excel process» و«Load add-ins and macros» في Launch Excel.  2 3

  6. Microsoft Learn, Platform limits and requirements with Office Scripts. حول قائمة التراخيص المطلوبة وشرط OneDrive for Business، والمنصات المدعومة (Excel on the web / نسخة Windows 2210 فما بعده / Mac)، وحد 5 ميغابايت للطلب / الاستجابة، وحد 5 ملايين خلية للنطاق، وحد 1,600 استدعاء يومي لـ Run script، ومهلة 120 ثانية، وحد 30,000,000 بايت للمعطيات، وفشل استدعاء واجهة API الخارجية (fetch) عند التشغيل عبر Power Automate، وكون النسخة الشخصية / المنزلية في مرحلة معاينة.  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، وحاجة استخدام Office Scripts من Power Automate إلى ترخيص Microsoft 365 التجاري، وقدرة E1 وF3 على التشغيل عبر Power Automate دون إمكانية استخدام ميزة التكامل داخل Excel.  2 3

  8. Microsoft Learn, Guidance: Migrate from classic workflows to Power Automate flows in SharePoint. حول كون إجراء HTTP العام في Power Automate موصلاً متميزاً (premium). 

  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). 

  12. Microsoft Learn, Tutorial: Create and format an Excel table. حول تسجيل العملية من علامة «Automate» في Excel عبر «New Script» ثم «Create from Recording»، والتحقق من فيض الشريط ومتطلبات المنصة إن لم تظهر علامة Automate، وأسلوب «سجّل ثم عدّل» بفتح محرر الكود من «Edit» في لوحة التفاصيل. الصفحة نفسها تعرض مثالاً يأخذ الورقة بـ workbook.getActiveWorksheet() بعد التسجيل مباشرة. 

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

هل يمكن تشغيل ماكرو VBA القائم مباشرة من Power Automate؟
لا يمكن تشغيله من التدفقات السحابية (cloud flows). يستطيع موصل Excel Online (Business) التعامل مع ملف .xlsm نفسه، لكن لا يمكن تشغيل الماكرو الموجود بداخله من Power Automate، والشيء الوحيد القابل للتشغيل هو Office Scripts. في المقابل، تحتوي تدفقات سطح المكتب (Power Automate for desktop) على إجراء Run Excel macro، الذي يتيح تشغيل ماكرو VBA الخاص بالمصنّف المفتوح عبر Launch Excel كما هو. إن أردت أتمتة التشغيل فقط دون تغيير كود VBA، فالمرور عبر تدفق سطح المكتب خيار عملي.
هل يُعد Office Scripts بديلاً كاملاً لـ VBA؟
لا. Office Scripts مخصّص لـ Excel فقط، ولا يمكنه التحكم في تطبيقات Office الأخرى مثل Word أو Outlook. ولأنه لا يصل إلا إلى المصنّف، فلا يمكنه التعامل مع الملفات المحلية أو التكامل عبر 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. كما يلزم ترخيص Microsoft 365 التجاري حتى عند تشغيل Office Scripts من Power Automate، مع ملاحظة أن E1 وF3 يتيحان التشغيل عبر Power Automate لكن دون استخدام ميزة تكامل Power Automate داخل Excel نفسه. وهذا يختلف عن VBA المضمَّن قياسياً في النسخة المكتبية من Excel دون حاجة إلى ترخيص إضافي، لذا يجب التحقق من ترخيص الشركة قبل اتخاذ قرار الترحيل.
هل تكفي أتمتة موصل Excel Online (Business) وحدها لإتمام العملية؟
تكفي للعمليات البسيطة، لكن يجب الانتباه إلى كثرة القيود الحدية. تفترض عمليات إضافة الصفوف واسترجاعها وتحديثها وحذفها أن يكون النطاق منسّقاً كجدول (ListObject)، ولا يعيد إجراء List rows present in a table افتراضياً أكثر من 256 صفاً، ما يستوجب تفعيل ترقيم الصفحات (pagination). حجم الملف الأقصى 25 ميغابايت، وحجم الطلب الواحد الأقصى 5 ميغابايت، وقد يحدث تأخير يصل إلى 30 ثانية في انعكاس الكتابة. التقسيم العملي: القراءة والكتابة لعدد قليل من الصفوف داخل الجدول عبر الموصل مباشرة، أما تنسيق الخلايا أو المعالجة عبر أوراق متعددة فعبر Office Scripts.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

العودة إلى المدونة