دليل VBA متقدم لبرنامج MS Excel

إذا كنت قد بدأت للتو مع VBA ، فأنت تريد أن تبدأ في دراسة دليل VBA الخاص بنا للمبتدئين(VBA guide for beginners) . ولكن إذا كنت خبيرًا متمرسًا في VBA وكنت تبحث عن المزيد من الأشياء المتقدمة التي يمكنك القيام بها باستخدام VBA في Excel ، فاستمر في القراءة.

تفتح القدرة على استخدام ترميز VBA في (VBA)Excel عالمًا كاملاً من الأتمتة. يمكنك أتمتة العمليات الحسابية في Excel ، والأزرار الانضغاطية ، وحتى إرسال البريد الإلكتروني. هناك المزيد من الاحتمالات لأتمتة عملك اليومي باستخدام VBA أكثر مما قد تدركه.

دليل VBA المتقدم لبرنامج Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

الهدف الرئيسي من كتابة كود VBA في (VBA)Excel هو أنه يمكنك استخراج المعلومات من جدول البيانات ، وإجراء مجموعة متنوعة من العمليات الحسابية عليه ، ثم إعادة كتابة النتائج إلى جدول البيانات

فيما يلي الاستخدامات الأكثر شيوعًا لـ VBA في Excel .

  • استيراد(Import) البيانات وإجراء العمليات الحسابية
  • حساب(Calculate) النتائج من مستخدم يضغط على زر
  • نتائج حساب البريد الإلكتروني(Email) لشخص ما

باستخدام هذه الأمثلة الثلاثة ، يجب أن تكون قادرًا على كتابة مجموعة متنوعة من أكواد Excel VBA المتقدمة الخاصة بك .

استيراد البيانات وإجراء العمليات الحسابية(Importing Data and Performing Calculations)

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

باستخدام VBA ، يمكنك أتمتة العملية بأكملها. على سبيل المثال ، إذا كان لديك ملف CSV جديد تم تنزيله في دليل على جهاز الكمبيوتر الخاص بك كل يوم اثنين(Monday) ، فيمكنك تكوين رمز VBA الخاص بك ليتم تشغيله عند فتح جدول البيانات لأول مرة يوم الثلاثاء(Tuesday) صباحًا.

سيتم تشغيل رمز الاستيراد التالي واستيراد ملف CSV إلى جدول بيانات Excel .

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")
Cells.ClearContents

strFile = “c:\temp\purchases.csv”

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With

افتح أداة تحرير Excel VBA وحدد كائن الورقة 1 . (Sheet1)من المربعات المنسدلة للكائن والطريقة ، اختر ورقة (Worksheet)عمل(Activate) وتنشيط . سيؤدي هذا إلى تشغيل الكود في كل مرة تفتح فيها جدول البيانات.

سيؤدي هذا إلى إنشاء دالة Sub Worksheet_Activate () . الصق الكود أعلاه في تلك الوظيفة.

يؤدي هذا إلى تعيين ورقة العمل النشطة على الورقة 1(Sheet1) ، ومسح الورقة ، والاتصال بالملف باستخدام مسار الملف الذي حددته باستخدام متغير strFile ، ثم دورات حلقة With عبر كل سطر في الملف وتضع البيانات في الورقة بدءًا من الخلية A1 .

إذا قمت بتشغيل هذا الرمز ، فسترى أنه يتم استيراد بيانات ملف CSV إلى جدول البيانات الفارغ ، في الورقة 1(Sheet1) .

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

ترتيب الإجراءات التي يجب أن تتخذها التعليمات البرمجية الخاصة بك هو:

  1. إنشاء عمود نتائج جديد يسمى الضرائب(taxes) .
  2. قم بالتكرار خلال عمود الوحدات المباعة(units sold) وحساب ضريبة المبيعات.
  3. اكتب نتائج الحساب إلى الصف المناسب في الورقة.

الكود التالي سوف ينجز كل هذه الخطوات.

Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
Cells(1, 5) = "taxes"

For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell

يعثر هذا الرمز على الصف الأخير في ورقة البيانات الخاصة بك ، ثم يقوم بتعيين نطاق الخلايا (العمود الذي يحتوي على أسعار المبيعات) وفقًا للصف الأول والأخير من البيانات. ثم يتنقل الرمز عبر كل خلية من هذه الخلايا ، ويقوم بحساب الضريبة ويكتب النتائج في العمود الجديد (العمود 5).

الصق كود فبا(VBA) أعلاه أسفل الكود السابق ، وقم بتشغيل البرنامج النصي. سترى النتائج تظهر في العمود E.

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

حساب النتائج من الضغط على زر(Calculate Results From Button Press)

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

تعتبر أزرار التحكم(Control) مفيدة إذا كنت تريد التحكم في الحسابات المستخدمة. على سبيل المثال ، في نفس الحالة المذكورة أعلاه ، ماذا لو كنت تريد استخدام معدل ضرائب بنسبة 5٪ لمنطقة ما ، ومعدل ضرائب بنسبة 7٪ لمنطقة أخرى؟

يمكنك السماح بتشغيل رمز استيراد CSV نفسه تلقائيًا ، لكن اترك رمز حساب الضريبة ليتم تشغيله عند الضغط على الزر المناسب.

باستخدام نفس جدول البيانات على النحو الوارد أعلاه ، حدد علامة التبويب المطور(Developer) ، وحدد إدراج(Insert) من مجموعة عناصر التحكم(Controls) في الشريط. حدد زر الضغط (push button) ActiveX Control من القائمة المنسدلة.

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

انقر بزر الماوس الأيمن فوق زر الضغط ، وحدد خصائص(Properties) . في نافذة الخصائص(Properties) ، قم بتغيير التسمية التوضيحية إلى ما تريد عرضه للمستخدم. في هذه الحالة قد يتم Calculate 5% Tax .

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

الصق رمز حساب الضريبة من القسم أعلاه في هذه الوظيفة ، مع الاحتفاظ بمضاعف معدل الضريبة عند 0.05. تذكر تضمين السطرين التاليين لتحديد الورقة النشطة.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

الآن ، كرر العملية مرة أخرى ، وقم بإنشاء زر ضغط ثانٍ. اجعل التسمية التوضيحية Calculate 7% Tax .

انقر نقرًا مزدوجًا فوق(Double-click) هذا الزر والصق نفس الرمز ، ولكن اجعل مضاعف الضريبة 0.07.

الآن ، بناءً على الزر الذي تضغط عليه ، سيتم حساب عمود الضرائب وفقًا لذلك.

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

لإرسال هذا النص ، حدد قائمة المطور(Developer) ، وحدد وضع التصميم(Design Mode) من مجموعة عناصر التحكم(Controls) في الشريط لتعطيل وضع التصميم(Design Mode) . سيؤدي ذلك إلى تنشيط الأزرار الانضغاطية. 

حاول تحديد كل زر ضغط لترى كيف يتغير عمود نتيجة "الضرائب".

نتائج حساب البريد الإلكتروني لشخص ما(Email Calculation Results to Someone)

ماذا لو كنت تريد إرسال النتائج في جدول البيانات إلى شخص ما عبر البريد الإلكتروني؟

يمكنك إنشاء زر آخر يسمى Email Sheet to Boss باستخدام نفس الإجراء أعلاه. سيتضمن رمز هذا الزر استخدام كائن Excel CDO لتكوين إعدادات بريد SMTP الإلكتروني وإرسال النتائج بالبريد الإلكتروني بتنسيق يمكن للمستخدم قراءته.

لتمكين هذه الميزة ، تحتاج إلى تحديد الأدوات والمراجع(Tools and References) . قم بالتمرير لأسفل إلى Microsoft CDO لمكتبة Windows 2000(Microsoft CDO for Windows 2000 Library) ، وقم بتمكينها ، ثم حدد موافق(OK) .

هناك ثلاثة أقسام رئيسية في الكود تحتاج إلى إنشائها لإرسال بريد إلكتروني وتضمين نتائج جدول البيانات.

الأول هو إعداد متغيرات للاحتفاظ بالموضوع وعناوين "إلى "(From) و "من " وجسم البريد الإلكتروني.

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."

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

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
strBody = strBody & vbCrLf

For Each cell In rng
     strBody = strBody & vbCrLf
     strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _
     & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "."
     rowCounter = rowCounter + 1
Next cell

يتضمن القسم التالي إعداد إعدادات SMTP بحيث يمكنك إرسال بريد إلكتروني عبر خادم SMTP الخاص بك . إذا كنت تستخدم Gmail ، فهذا هو عادةً عنوان بريدك الإلكتروني في Gmail وكلمة مرور Gmail وخادم (Gmail)Gmail SMTP (smtp.gmail.com).

Set CDO_Mail = CreateObject("CDO.Message") 
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
 .Update
End With

With CDO_Mail
     Set .Configuration = CDO_Config
End With

استبدل [email protected] وكلمة المرور بتفاصيل حسابك الخاص.

أخيرًا ، لبدء إرسال البريد الإلكتروني ، أدخل الكود التالي.

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

ملاحظة(Note) : إذا رأيت خطأ في النقل عند محاولة تشغيل هذا الرمز ، فمن المحتمل أن يكون ذلك بسبب قيام حساب Google الخاص بك بحظر تشغيل "التطبيقات الأقل أمانًا". ستحتاج إلى زيارة صفحة إعدادات التطبيقات الأقل أمانًا(less secure apps settings page) وتشغيل هذه الميزة.

بعد تمكين ذلك ، سيتم إرسال بريدك الإلكتروني. هذا ما يبدو عليه الشخص الذي يتلقى البريد الإلكتروني الخاص بالنتائج التي تم إنشاؤها تلقائيًا.

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



About the author

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



Related posts