10 طرق لتسريع وحدات الماكرو الخاصة بك

نظرًا لأن وحدات ماكرو Excel لديك تزداد قوة وتعقيدًا ، فقد تجد أنها تفقد الأداء. عند مناقشة وحدات الماكرو ، يكون أداء الكلمة عادةً مرادفًا للسرعة . السرعة هي مدى سرعة إجراءات VBA الخاصة بك في أداء المهام المقصودة. فيما يلي عشر طرق للمساعدة في الحفاظ على تشغيل وحدات ماكرو Excel بمستوى الأداء الأمثل.

توقف حسابات الورقة

هل تعلم أنه في كل مرة يتم فيها تغيير خلية تؤثر على أي صيغة في جدول البيانات أو معالجتها ، يقوم Excel بإعادة حساب ورقة العمل بأكملها؟ في أوراق العمل التي تحتوي على قدر كبير من الصيغ ، يمكن أن يؤدي هذا السلوك إلى إبطاء وحدات الماكرو بشكل كبير.

يمكنك استخدام الخاصية Application.Calculation لإخبار Excel بالتبديل إلى وضع الحساب اليدوي. عندما يكون المصنف في وضع الحساب اليدوي ، فلن يقوم المصنف بإعادة الحساب حتى تقوم صراحة بتشغيل عملية حسابية بالضغط على المفتاح F9.

ضع Excel في وضع الحساب اليدوي ، وقم بتشغيل التعليمات البرمجية الخاصة بك ، ثم عد إلى وضع الحساب التلقائي.

الماكرو الفرعي 1 ()
Application.Calculation = xlCalculationManual
 ضع رمز الماكرو الخاص بك هنا
Application.Calculation = xlCalcalculationAutomatic
End Sub

سيؤدي تعيين وضع الحساب مرة أخرى إلى xlCalculationAutomatic إلى إعادة حساب ورقة العمل تلقائيًا ، لذلك ليست هناك حاجة للضغط على المفتاح F9 بعد تشغيل الماكرو.

تعطيل تحديث شاشة الورقة

قد تلاحظ أنه عند تشغيل وحدات الماكرو الخاصة بك ، تقوم شاشتك بقدر لا بأس به من الوميض. هذا الوميض هو محاولة Excel لإعادة رسم الشاشة لإظهار الحالة الحالية لورقة العمل. لسوء الحظ ، في كل مرة يعيد Excel رسم الشاشة ، يشغل موارد الذاكرة.

يمكنك استخدام الخاصية Application.ScreenUpdating لتعطيل تحديثات الشاشة حتى يكتمل الماكرو الخاص بك. يؤدي تعطيل تحديث الشاشة إلى توفير الوقت والموارد ، مما يسمح بتشغيل الماكرو بشكل أسرع قليلاً. بعد انتهاء تشغيل رمز الماكرو ، يمكنك تشغيل تحديث الشاشة مرة أخرى.

الماكرو الفرعي 1 ()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = خطأ
 ضع رمز الماكرو الخاص بك هنا
Application.Calculation = xlCalcalculationAutomatic
Application.ScreenUpdating = صحيح
End Sub

بعد إعادة تعيين خاصية ScreenUpdating إلى True ، سيقوم Excel تلقائيًا بتشغيل إعادة رسم الشاشة.

إيقاف تشغيل تحديثات شريط الحالة

عادةً ما يعرض شريط حالة Excel ، الذي يظهر أسفل نافذة Excel ، تقدم بعض الإجراءات في Excel. إذا كان الماكرو الخاص بك يعمل مع الكثير من البيانات ، فسيشغل شريط الحالة بعض الموارد.

من المهم ملاحظة أن إيقاف تشغيل تحديث الشاشة منفصل عن إيقاف تشغيل عرض شريط الحالة. سيستمر تحديث شريط الحالة حتى إذا قمت بتعطيل تحديث الشاشة. يمكنك استخدام الخاصية Application.DisplayStatusBar لتعطيل أي تحديثات لشريط الحالة مؤقتًا ، مما يؤدي إلى زيادة تحسين أداء الماكرو الخاص بك:

الماكرو الفرعي 1 ()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = خطأ
Application.DisplayStatusBar = خطأ
 ضع رمز الماكرو الخاص بك هنا
Application.Calculation = xlCalcalculationAutomatic
Application.ScreenUpdating = صحيح
Application.DisplayStatusBar = صحيح
End Sub

إخبار Excel بتجاهل الأحداث

يمكنك تنفيذ وحدات الماكرو كإجراءات حدث ، وإخبار Excel بتشغيل تعليمات برمجية معينة عند تغيير ورقة العمل أو المصنف.

في بعض الأحيان ، تقوم وحدات الماكرو القياسية بإجراء تغييرات من شأنها تشغيل إجراء حدث. على سبيل المثال ، إذا كان لديك ماكرو قياسي يعالج عدة خلايا على الورقة 1 ، في كل مرة يتم تغيير خلية في تلك الورقة ، يجب أن يتوقف الماكرو مؤقتًا أثناء تشغيل الحدث Worksheet_Change.

يمكنك إضافة مستوى آخر من تحسين الأداء باستخدام الخاصية EnableEvents لإخبار Excel بتجاهل الأحداث أثناء تشغيل الماكرو.

قم بتعيين الخاصية EnableEvents إلى False قبل تشغيل الماكرو. بعد الانتهاء من تشغيل التعليمات البرمجية للماكرو ، يمكنك إعادة تعيين الخاصية EnableEvents إلى True.

الماكرو الفرعي 1 ()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = خطأ
Application.DisplayStatusBar = خطأ
Application.EnableEvents = خطأ
 ضع رمز الماكرو الخاص بك هنا
Application.Calculation = xlCalcalculationAutomatic
Application.ScreenUpdating = صحيح
Application.DisplayStatusBar = صحيح
Application.EnableEvents = صحيح
End Sub

إخفاء فواصل الصفحات

في كل مرة يقوم فيها الماكرو بتعديل عدد الصفوف أو تعديل عدد الأعمدة أو تغيير إعداد الصفحة في ورقة العمل ، يضطر Excel إلى قضاء بعض الوقت في إعادة حساب فواصل الصفحات المعروضة على الورقة.

يمكنك تجنب هذا السلوك ببساطة عن طريق إخفاء فواصل الصفحات قبل بدء الماكرو.

قم بتعيين خاصية ورقة DisplayPageBreaks إلى False لإخفاء فواصل الصفحات. إذا كنت تريد الاستمرار في إظهار فواصل الصفحات بعد تشغيل الماكرو ، فقم بتعيين خاصية ورقة DisplayPageBreaks مرة أخرى إلى True.

الماكرو الفرعي 1 ()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = خطأ
Application.DisplayStatusBar = خطأ
Application.EnableEvents = خطأ
Activesheet.DisplayPageBreaks = خطأ
 ضع رمز الماكرو الخاص بك هنا
Application.Calculation = xlCalcalculationAutomatic
Application.ScreenUpdating = صحيح
Application.DisplayStatusBar = صحيح
Application.EnableEvents = صحيح
Activesheet.DisplayPageBreaks = صحيح
End Sub

تعليق تحديثات الجدول المحوري

إذا كان الماكرو يتعامل مع الجداول المحورية التي تحتوي على مصادر بيانات كبيرة ، فقد تواجه أداءً ضعيفًا عند القيام بأشياء مثل إضافة الحقول المحورية أو نقلها ديناميكيًا.

يمكنك تحسين أداء الماكرو الخاص بك عن طريق تعليق إعادة حساب الجدول المحوري حتى يتم إجراء جميع تغييرات الحقل المحوري. ما عليك سوى تعيين الخاصية PivotTable.ManualUpdate إلى True لتأجيل إعادة الحساب ، وتشغيل التعليمات البرمجية للماكرو ، ثم تعيين خاصية PivotTable.ManualUpdate إلى False لتشغيل إعادة الحساب.

الماكرو الفرعي 1 ()
ActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = True
 ضع رمز الماكرو الخاص بك هنا
ActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = False
End Sub

الابتعاد عن النسخ واللصق

من المهم أن تتذكر أنه على الرغم من أن Macro Recorder يوفر الوقت عن طريق كتابة رمز VBA نيابةً عنك ، فإنه لا يكتب دائمًا الرمز الأكثر كفاءة. المثال الرئيسي هو كيفية التقاط Macro Recorder لأي إجراء نسخ ولصق تقوم به أثناء التسجيل.

يمكنك إعطاء دفعة طفيفة لوحدات الماكرو عن طريق الاستغناء عن الوسيط وإجراء نسخة مباشرة من خلية واحدة إلى خلية الوجهة. يستخدم هذا الرمز البديل وسيطة الوجهة لتجاوز الحافظة ونسخ محتويات الخلية A1 مباشرة إلى الخلية B1.

النطاق ("A1"). وجهة النسخ: = النطاق ("B1")

إذا كنت بحاجة إلى نسخ القيم فقط (وليس التنسيق أو الصيغ) ، فيمكنك تحسين الأداء أكثر من خلال تجنب طريقة النسخ معًا. ما عليك سوى تعيين قيمة الخلية الوجهة إلى نفس القيمة الموجودة في الخلية المصدر. هذه الطريقة أسرع بنحو 25 مرة من استخدام طريقة النسخ:

النطاق ("B1"). القيمة = النطاق ("A1"). القيمة

إذا كنت بحاجة إلى نسخ الصيغ فقط من خلية إلى أخرى (وليس القيم أو التنسيق) ، فيمكنك تعيين صيغة الخلية الوجهة إلى نفس الصيغة الموجودة في الخلية المصدر:

النطاق ("B1"). الصيغة = النطاق ("A1"). الصيغة

استخدام جملة With

عند تسجيل وحدات الماكرو ، غالبًا ما تقوم بمعالجة نفس الكائن أكثر من مرة. يمكنك توفير الوقت وتحسين الأداء باستخدام العبارة With لأداء العديد من الإجراءات على كائن معين في لقطة واحدة.

تخبر عبارة With المستخدمة في المثال التالي برنامج Excel لتطبيق جميع تغييرات التنسيق في وقت واحد:

    مع النطاق ("A1"). الخط
    . بولد = صحيح
    . مائل = صحيح
    .Underline = xlUnderlineStyleSingle
    انتهت ب

لن يؤدي التعود على عادة تقسيم الإجراءات إلى عبارات With إلى الحفاظ على وحدات الماكرو الخاصة بك تعمل بشكل أسرع فحسب ، بل سيسهل أيضًا قراءة التعليمات البرمجية للماكرو.

تجنب طريقة التحديد

مسجل الماكرو مغرم باستخدام طريقة التحديد لتحديد الكائنات بشكل صريح قبل اتخاذ إجراءات بشأنها. بشكل عام ليست هناك حاجة لتحديد الكائنات قبل العمل معهم. في الواقع ، يمكنك تحسين أداء الماكرو بشكل كبير من خلال عدم استخدام طريقة التحديد.

بعد تسجيل وحدات الماكرو الخاصة بك ، اجعل من المعتاد تغيير الكود الذي تم إنشاؤه لإزالة طرق التحديد. في هذه الحالة ، ستبدو الشفرة المحسّنة كما يلي:

    الأوراق ("Sheet1"). النطاق ("A1"). FormulaR1C1 = "1000"
    الأوراق ("Sheet2"). النطاق ("A1"). FormulaR1C1 = "1000"
    الأوراق ("Sheet3"). النطاق ("A1"). FormulaR1C1 = "1000"

لاحظ أنه لا يتم تحديد أي شيء. يستخدم الكود ببساطة التسلسل الهرمي للكائن لتطبيق الإجراءات المطلوبة.

تقييد الرحلات على ورقة العمل

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

على سبيل المثال ، يجبر الكود البسيط التالي VBA على العودة باستمرار إلى جداول البيانات ("Sheet1"). Range ("A1") للحصول على الرقم المطلوب للمقارنة التي يتم إجراؤها في عبارة If:

لتقرير الشهر = 1 إلى 12
     إذا كان النطاق ("A1"). القيمة = ReportMonth ثم
     MsgBox 1000000 / ReportMonth
إنهاء إذا
التقرير القادمشهر

هناك طريقة أكثر فاعلية تتمثل في حفظ القيمة في جداول البيانات ("الورقة 1") النطاق ("A1") إلى متغير يسمى MyMonth. بهذه الطريقة ، تشير الكود إلى متغير MyMonth بدلاً من ورقة العمل:

خافت MyMonth كعدد صحيح
MyMonth = المدى ("A1"). القيمة
لتقرير الشهر = 1 إلى 12
إذا كان MyMonth = ReportMonth إذن
MsgBox 1000000 / ReportMonth
إنهاء إذا
التقرير القادمشهر

ضع في اعتبارك الاستفادة من المتغيرات للعمل مع البيانات في الذاكرة بدلاً من الرجوع المباشر إلى أوراق العمل.

تجنب المرجعية المفرطة

عند استدعاء أسلوب أو خاصية كائن ما، فإنه يحتاج إلى المرور عبر واجهة IDispatch الخاصة بمكون OLE. تستغرق الاستدعاءات إلى مكونات OLE هذه وقتًا، لذا فإن تقليل عدد المراجع إلى مكونات OLE يمكن أن يؤدي إلى تحسين سرعة تعليمات الماكرو البرمجية.

لاستدعاء خصائص الكائن أو الأساليب، يتم استخدام طريقة تمثيل  Object.Method  بشكل عام، أي "." يستخدم الرمز لاستدعاء الخصائص والأساليب.

لذلك، يمكن الحكم على عدد استدعاءات الأسلوب أو الخاصية وفقًا لعدد الرموز ".". كلما قل "." الرمز، كلما تم تشغيل الكود بشكل أسرع.

على سبيل المثال، تتضمن العبارة التالية 3 رموز ".".

ThisWorkbook.Sheet1.Range("A1").Value = 100

العبارة التالية لها رمز واحد فقط ".".

Activewindow.Top = 100

فيما يلي بعض الحيل لتقليل عدد الرموز "." لتشغيل أسرع.

أولاً، عندما تحتاج إلى الإشارة إلى نفس الكائن بشكل متكرر، يمكنك تعيين الكائن إلى متغير لتقليل عدد الاستدعاءات. على سبيل المثال، يتطلب التعليمة البرمجية التالية مكالمتين لكل سطر.

ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300

نظرًا لأن  كائن Sheets("Sheet1")  يحتاج إلى الرجوع إليه بشكل متكرر، فيمكن تعيينه على متغير  sht  أولاً، بحيث يجب استدعاء كل رمز مرة واحدة فقط.

Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300

ثانيًا، إذا كنت لا تريد الإعلان عن متغير مؤقت sht، فيمكنك أيضًا استخدام عبارة  With  المذكورة سابقًا. كما هو موضح في المثال التالي:

With ThisWorkbook.Sheets("Sheet1")
    .Cells(1, 1) = 100
    .Cells(2, 1) = 200
    .Cells(3, 1) = 300
End With

ثالثًا،  عندما يكون هناك الكثير من الحلقات، حاول الاحتفاظ بالخصائص والأساليب خارج الحلقة.  عند إعادة استخدام قيمة خاصية لنفس الكائن في حلقة، يمكنك أولاً تعيين قيمة الخاصية لمتغير محدد خارج الحلقة، ثم استخدام المتغير الموجود في الحلقة، والذي يمكن أن يحقق سرعة أكبر. كما هو موضح في المثال التالي:

For i = 1 To 1000
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
    ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
    ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i

تحصل كل حلقة في هذا المثال على خاصية القيمة للخلية Cells(1,2). إذا قمت بتعيين خاصية قيمة الخلايا (1.2) لمتغير قبل بدء الحلقة، فسوف تحصل على تشغيل أسرع. كما هو موضح في المثال التالي:

tmp = Cells(1, 2).Value
For i = 1 To 1000
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
    ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
    ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i

يستدعي التعليمة البرمجية أعلاه  ThisWorkbook.Sheets("Sheet1")  في كل مرة يتم تكرارها. يمكنك القيام بذلك بشكل أسرع باستخدام  عبارة With  لنقل الاستدعاء إلى  ThisWorkbook.Sheets("Sheet1")  خارج الحلقة. كما هو موضح في المثال التالي:

tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
    For i = 1 To 1000
        .Cells(1, 1) = tmp
        .Cells(2, 1) = tmp
        .Cells(3, 1) = tmp
    Next i
End With

تجنب استخدام أنواع المتغيرات

يفضل المبتدئون عادةً استخدام متغيرات النوع المتغير، والتي تتميز بكونها أقل تعقيدًا لأنه يمكن استخدام أي نوع من البيانات دون مشكلة تجاوز سعة الذاكرة إذا كانت البيانات كبيرة جدًا بالنسبة لأنواع البيانات الصحيحة أو الطويلة. ومع ذلك، تتطلب بيانات نوع Varienmt مساحة ذاكرة إضافية أكبر من الأنواع المحددة الأخرى (2 بايت للبيانات الصحيحة، و4 بايت للبيانات الطويلة، و16 بايت للبيانات المتغيرة)، ويتطلب VBA وقتًا أطول لمعالجة بيانات النوع المتغير مقارنة بالأنواع المحددة الأخرى البيانات. كما يظهر المثال التالي.

Sub VariantTest()
    Dim i As Long
    Dim ix As Integer, iy As Integer, iz As Integer
    Dim vx As Variant, vy As Variant, vz As Variant
    Dim tm As Date
    vx = 100: vy = 50
    tm = Timer
    For i = 1 To 1000000
        vz = vx * vy
        vz = vx + vy
        vz = vx - vy
        vz = vx / vy
    Next i
    Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
    ix = 100: iy = 50
    tm = Timer
    For i = 1 To 1000000
        iz = ix * iy
        iz = ix + iy
        iz = ix - iy
        iz = ix / iy
    Next i
    Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub

في الكود أعلاه، تقوم الأسطر من 8 إلى 13 بمليون عملية جمع وطرح وضرب وقسمة للمتغيرات المتغيرة، بينما تقوم الأسطر من 17 إلى 22 بمليون عملية جمع وطرح وضرب وقسمة للمتغيرات الصحيحة. على جهاز الكمبيوتر الخاص بي، استغرق تشغيل المتغير Variant حوالي  0.09375  ثانية، بينما استغرق تشغيل المتغير Integer حوالي  0.03125  ثانية. قد تختلف النتائج من كمبيوتر إلى آخر، لكن  المتغيرات المتغيرة تكون أبطأ بشكل ملحوظ من المتغيرات الصحيحة .

لهذا السبب،  يوصى بتجنب استخدام المتغيرات المتغيرة عندما يمكنك استخدام نوع البيانات المحدد بشكل صريح .


الورقة الذكية 9.1.1

الورقة الذكية 9.1.1

Smartsheet عبارة عن منصة عمل ديناميكية تتيح لك إدارة المشاريع وإنشاء سير العمل والتعاون مع فريقك.

نقطة مشاركة

نقطة مشاركة

SharePoint هو نظام تعاون قائم على الويب يستخدم مجموعة متنوعة من تطبيقات سير العمل وقواعد بيانات "القائمة" ومكونات الويب الأخرى، بالإضافة إلى ميزات الأمان لمنح التحكم في عمل مجموعات الأعمال معًا.

التقويم الدائم 1.0.38/1.0.36

التقويم الدائم 1.0.38/1.0.36

Van Nien Calendar هو تطبيق لعرض التقويم على هاتفك، مما يساعدك على رؤية التاريخ القمري الشمسي على هاتفك بسرعة، وبالتالي ترتيب أعمالك المهمة.

مايكروسوفت أوتلوك 2021

مايكروسوفت أوتلوك 2021

Microsoft Outlook هو تطبيق للأعمال والإنتاجية تم تطويره بواسطة شركة Microsoft Corporation.

انقر فوق

انقر فوق

ClickUp هي واحدة من منصات الإنتاجية الأعلى تقييمًا لأي عمل تجاري. تستخدم الشركات الكبيرة مثل Google وBooking.com وSan Diego Padres وUber جميعها ClickUp لزيادة إنتاجية مكان العمل.

عارض PDF-XChange 2.5.322.10

عارض PDF-XChange 2.5.322.10

أصبح PDF تنسيقًا شائع الاستخدام لقراءة المستندات النصية وإنشائها وإرسالها. وفي المقابل، حدثت زيادة في عدد البرامج المستخدمة لهذا النوع من التوثيق. يعد PDF-XChange Viewer من بين عدد متزايد من برامج عرض PDF.

أباتشي أوبن أوفيس

أباتشي أوبن أوفيس

يقدم Apache OpenOffice مجموعة كاملة من تطبيقات Office التي تنافس Microsoft 365، خاصة في Excel وPowerPoint وWord. فهو يسمح لك بإدارة مشاريعك بشكل أكثر فعالية، ويدعم العديد من تنسيقات الملفات.

تحميل برنامج iTaxviewer 1.8.7

تحميل برنامج iTaxviewer 1.8.7

يعد برنامج iTaxViewer هو برنامج قراءة ملفات XML الأكثر شيوعًا اليوم. هذا البرنامج عبارة عن تطبيق لقراءة الإقرارات الضريبية الإلكترونية بتنسيق XML الخاص بالإدارة العامة للضرائب.

قارئ ملفات PDF نيترو

قارئ ملفات PDF نيترو

Nitro PDF Reader هو محرر PDF مفيد يغطي جميع المهام الأساسية التي يؤديها معظم الأشخاص يوميًا باستخدام مستندات PDF.

برنامج فوكسيت ريدر 12

برنامج فوكسيت ريدر 12

يعد برنامج Foxit Reader في المقام الأول قارئ PDF، ويسمح لك أيضًا بإنشاء ملفات PDF وتوقيعها وتحريرها وإضافة التعليقات التوضيحية. يعمل على أنظمة التشغيل، ويوجد ملحقات لبرامج متنوعة من حزمة Microsoft Office.