JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

-->
Startseite

أهم 10 أكواد في Excel VBA: دليل شامل للمبتدئين والمحترفين

 

أهم 10 أكواد في Excel VBA: دليل شامل للمبتدئين والمحترفين

 

Visual Basic for Applications)VBA) هو لغة برمجة قوية مدمجة في Excel تتيح لك أتمتة المهام وتحسين. في هذا الدليل الشامل، سنستعرض أهم 10 أكواد VBA التي يجب أن يعرفها كل مستخدم.

 


 1. فتح وإغلاق المصنفات (Workbooks)

 

 الكود الأساسي:

    ' فتح مصنف موجود

Workbooks.Open "C:\المسار\المصنف.xlsx"

 

' إغلاق المصنف الحالي مع الحفظ

ActiveWorkbook.Close SaveChanges:=True

 

' إنشاء مصنف جديد

Workbooks.Add

 

 

 الشرح التفصيلي:

- Workbooks.Open`: تفتح مصنفاً موجوداً من مسار محدد

- ActiveWorkbook.Close`: تغلق المصنف النشط مع خيار حفظ التغييرات

- Workbooks.Add`: تنشئ مصنفاً جديداً

 

 مثال عملي:

Vba

 

Sub فتح_وإغلاق_مصنف()

    ' فتح مصنف موجود

    Workbooks.Open "C:\تقارير\التقرير الشهري.xlsx"

   

    ' الانتظار لمدة ثانيتين

    Application.Wait Now + TimeValue("00:00:02")

   

    ' إغلاق المصنف مع الحفظ

    ActiveWorkbook.Close SaveChanges:=True

End Sub

 

 

 2. التعامل مع الأوراق (Worksheets)

 

 الكود الأساسي:

 

' التنقل إلى ورقة محددة

Worksheets("البيانات").Activate

 

' إضافة ورقة جديدة

Worksheets.Add After:=Worksheets(Worksheets.Count)

 

' إعادة تسمية ورقة

Worksheets("Sheet1").Name = "البيانات"

 

' حذف ورقة

Application.DisplayAlerts = False

Worksheets("ورقة للحذف").Delete

Application.DisplayAlerts = True

 

 

 الشرح التفصيلي:

- .Activate`: تجعل الورقة نشطة

- .Add`: تضيف ورقة جديدة

- .Name`: تغير اسم الورقة

- .Delete`: تحذف الورقة (مع تعطيل التنبيهات)

 

 مثال عملي:

 

Sub إدارة_الأوراق()

    ' إضافة ورقة جديدة

    Dim newSheet As Worksheet

    Set newSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))

   

    ' تسمية الورقة الجديدة

    newSheet.Name = "البيانات_" & Format(Now, "yyyy-mm-dd")

   

    ' التنقل إلى الورقة الجديدة

    newSheet.Activate

End Sub

 

 

 

 

 3. التعامل مع الخلايا والنطاقات

 

 الكود الأساسي:

vba' الكتابة في خلية

Range("A1").Value = "الاسم"

 

' القراءة من خلية

Dim cellValue As String

cellValue = Range("A1").Value

 

' تحديد نطاق

Range("A1:B10").Select

 

' نسخ ولصق

Range("A1:B10").Copy Destination:=Range("C1")

 

' التكامل التلقائي

Range("A1:A10").FillDown

 

 الشرح التفصيلي:

- Range().Value`: للقراءة من أو الكتابة إلى الخلايا

- .Copy`: لنسخ النطاق

- .FillDown`: لملء الخلايا تلقائياً

 

 مثال عملي:

vba Sub تعبئة_البيانات()

    ' تعبئة أسماء الأشهر

    Dim الأشهر(1 To 12) As String

    الأشهر(1) = "يناير": الأشهر(2) = "فبراير": الأشهر(3) = "مارس"

    الأشهر(4) = "أبريل": الأشهر(5) = "مايو": الأشهر(6) = "يونيو"

    الأشهر(7) = "يوليو": الأشهر(8) = "أغسطس": الأشهر(9) = "سبتمبر"

    الأشهر(10) = "أكتوبر": الأشهر(11) = "نوفمبر": الأشهر(12) = "ديسمبر"

   

    ' كتابة البيانات في العمود A

    For i = 1 To 12

        Cells(i, 1).Value = الأشهر(i)

        Cells(i, 2).Value = i * 1000 ' قيم عشوائية

    Next i

End Sub

 

 

 

 4. الحلقات التكرارية (Loops)

 

 أنواع الحلقات:

 

 1. حلقة For

For i = 1 To 10

    Cells(i, 1).Value = i * 2

Next i

 

 

 2. حلقة For Each

For Each cell In Range("A1:A10")

    cell.Value = cell.Value * 1.1 ' زيادة 10%

Next cell

 

 3. حلقة Do While

Dim i As Integer

i = 1

Do While i <= 10

    Cells(i, 1).Value = i

    i = i + 1

Loop

 

 مثال متقدم:

Sub معالجة_البيانات()

    Dim lastRow As Long

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

   

    ' تطبيق زيادة 15% على جميع القيم في العمود B

    For i = 2 To lastRow

        If IsNumeric(Cells(i, 2).Value) Then

            Cells(i, 2).Value = Cells(i, 2).Value * 1.15

            Cells(i, 3).Value = "محدث"

        End If

    Next i

End Sub

 

 

 

 

 

 5. الجمل الشرطية (If Statements)

 

 البنية الأساسية:

' جملة If بسيطة

If الشرط Then

    ' التنفيذ إذا كان الشرط صحيحاً

End If

 

' جملة If Else

If الشرط Then

    ' إذا كان الشرط صحيحاً

Else

    ' إذا كان الشرط خاطئاً

End If

 

' جملة If متعددة الشروط

If الشرط1 And الشرط2 Then

    ' إذا تحقق كلا الشرطين

ElseIf الشرط3 Then

    ' إذا تحقق الشرط الثالث

Else

    ' إذا لم يتحقق أي شرط

End If

 

 

 مثال عملي:

Sub تحليل_الدرجات()

    Dim الدرجة As Integer

    الدرجة = Range("B2").Value

   

    If الدرجة >= 90 Then

        Range("C2").Value = "ممتاز"

        Range("C2").Font.Color = RGB(0, 128, 0) ' لون أخضر

    ElseIf الدرجة >= 80 Then

        Range("C2").Value = "جيد جداً"

        Range("C2").Font.Color = RGB(0, 0, 255) ' لون أزرق

    ElseIf الدرجة >= 70 Then

        Range("C2").Value = "جيد"

        Range("C2").Font.Color = RGB(255, 165, 0) ' لون برتقالي

    Else

        Range("C2").Value = "ضعيف"

        Range("C2").Font.Color = RGB(255, 0, 0) ' لون أحمر

    End If

End Sub

 

 

 

 6. إنشاء وتشغيل الماكرو

 

 إنشاء ماكرو:

Sub الماكرو_الخاص_بي()

    ' كود الماكرو هنا

    MsgBox "تم تنفيذ الماكرو بنجاح!"

End Sub

 

 استدعاء ماكرو من ماكرو آخر:

Sub الماكرو_الرئيسي()

    ' تنفيذ عدة ماكروات

    Call تنظيف_البيانات

    Call معالجة_البيانات

    Call إنشاء_التقرير

End Sub

 

Sub تنظيف_البيانات()

    ' كود التنظيف

End Sub

 

 

 مثال متكامل:

   

   

    Sub نظام_التقارير()

    ' تسجيل وقت البدء

    Dim startTime As Double

    startTime = Timer

   

    ' تنفيذ سلسلة من الماكروات

    Call استيراد_البيانات

    Call تنظيف_البيانات

    Call تحليل_البيانات

    Call إنشاء_الرسوم_البيانية

    Call حفظ_التقرير

   

    ' حساب وقت التنفيذ

    Dim executionTime As Double

    executionTime = Round(Timer - startTime, 2)

   

    MsgBox "تم إنشاء التقرير في " & executionTime & " ثانية"

End Sub

 

 

 

 

 

 7. صناديق الرسائل والإدخال

 

 

 

' رسالة بسيطة

MsgBox "عملية ناجحة!"

 

' رسالة مع زر موافق وإلغاء

Dim response As VbMsgBoxResult

response = MsgBox("هل تريد المتابعة؟", vbYesNo + vbQuestion, "تأكيد")

 

If response = vbYes Then

    ' المتابعة

Else

    ' الإلغاء

End If

 

 

 

 

 Dim userName As String

userName = InputBox("أدخل اسمك:", "إدخال البيانات")

 

If userName <> "" Then

    Range("A1").Value = "مرحباً " & userName

Else

    MsgBox "لم تدخل أي اسم"

End If

 

 مثال متقدم:

Sub جمع_الأرقام()

    Dim num1 As Double, num2 As Double

   

    ' طلب إدخال الرقم الأول

    num1 = Val(InputBox("أدخل الرقم الأول:", "جمع الأرقام"))

   

    ' طلب إدخال الرقم الثاني

    num2 = Val(InputBox("أدخل الرقم الثاني:", "جمع الأرقام"))

   

    ' عرض النتيجة

    MsgBox "نتيجة الجمع: " & (num1 + num2), vbInformation, "النتيجة"

   

    ' كتابة النتيجة في الخلية

    Range("A1").Value = num1 + num2

End Sub

   

 

 8. التعامل مع الأخطاء

 

 معالجة الأخطاء:

    Sub معالج_الأخطاء()

    On Error GoTo ErrorHandler

   

    ' كود قد يسبب أخطاء

    Dim result As Double

    result = 100 / 0 ' قسمة على صفر

   

    Exit Sub

   

ErrorHandler:

    MsgBox "حدث خطأ: " & Err.Description & vbCrLf & _

           "رقم الخطأ: " & Err.Number, vbCritical, "خطأ"

   

    ' إعادة تعيين كائن الخطأ

    Err.Clear

End Sub

 

 

 أنواع معالجة الأخطاء:

vba

' تخطي الأخطاء والمتابعة

On Error Resume Next

 

' الانتقال إلى معالج الأخطاء

On Error GoTo ErrorHandler

 

' إيقاف معالجة الأخطاء

On Error GoTo 0

 

 

 مثال عملي:

Sub استيراد_البيانات()

    On Error GoTo ErrorHandler

   

    ' محاولة فتح ملف قد لا يكون موجوداً

    Workbooks.Open "C:\بيانات\الملف_غير_موجود.xlsx"

   

    ' إذا نجحت العملية

    MsgBox "تم استيراد البيانات بنجاح"

    Exit Sub

   

ErrorHandler:

    Select Case Err.Number

        Case 1004 ' ملف غير موجود

            MsgBox "الملف غير موجود. الرجاء التحقق من المسار"

        Case 13 ' نوع غير متطابق

            MsgBox "خطأ في نوع البيانات"

        Case Else

            MsgBox "حدث خطأ غير متوقع: " & Err.Description

    End Select

End Sub

 

 9. إنشاء وتعديل الدوال

 

 إنشاء دالة مخصصة:

Function حساب_الضريبة(المبلغ As Double, نسبة_الضريبة As Double) As Double

    ' حساب قيمة الضريبة

    حساب_الضريبة = المبلغ * (نسبة_الضريبة / 100)

End Function

 

Function فئة_الدخل(الدخل As Double) As String

    ' تحديد فئة الدخل

    Select Case الدخل

        Case Is >= 10000

            فئة_الدخل = "عالي"

        Case 5000 To 9999

            فئة_الدخل = "متوسط"

        Case Else

            فئة_الدخل = "منخفض"

    End Select

End Function

 

 

 استخدام الدوال في الورقة:

    =حساب_الضريبة(B2, 15)

=فئة_الدخل(C2)

 

 

 مثال متقدم:

Function تقييم_الأداء(المبيعات As Double, الهدف As Double) As String

    Dim النسبة As Double

    النسبة = (المبيعات / الهدف) * 100

   

    Select Case النسبة

        Case Is >= 120

            تقييم_الأداء = "ممتاز"

        Case 100 To 119

            تقييم_الأداء = "جيد جداً"

        Case 80 To 99

            تقييم_الأداء = "مقبول"

        Case Else

            تقييم_الأداء = "تحت التوقعات"

    End Select

End Function

 

 

 

 

 10. التعامل مع الأحداث

 

 أحداث الورقة:

Private Sub Worksheet_Change(ByVal Target As Range)

    ' يتم تنفيذ هذا الكود عند تغيير أي خلية في الورقة

    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then

        MsgBox "تم تغيير خلية في النطاق A1:A10"

    End If

End Sub

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ' يتم تنفيذ هذا الكود عند تغيير التحديد

    If Target.Cells.Count = 1 Then

        Range("Z1").Value = "اخترت الخلية: " & Target.Address

    End If

End Sub

 

 

 أحداث المصنف:

Private Sub Workbook_Open()

    ' يتم تنفيذ هذا الكود عند فتح المصنف

    MsgBox "مرحباً بك في نظام التقارير الشهرية", vbInformation, "ترحيب"

   

    ' تحديث التاريخ التلقائي

    Sheets("الرئيسية").Range("A1").Value = "آخر تحديث: " & Now()

End Sub

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    ' يتم تنفيذ هذا الكود قبل إغلاق المصنف

    If MsgBox("هل تريد حفظ التغييرات؟", vbYesNo) = vbYes Then

        ThisWorkbook.Save

    End If

End Sub

 

 

 مثال متكامل:

' في وحدة الورقة

Private Sub Worksheet_Change(ByVal Target As Range)

    ' التحقق إذا كان التغيير في عمود الأسعار

    If Not Intersect(Target, Range("C:C")) Is Nothing Then

        Application.EnableEvents = False

        On Error GoTo Finalize

       

        ' تطبيق الخصم التلقائي

        If Target.Value > 1000 Then

            Target.Offset(0, 1).Value = Target.Value * 0.9 ' خصم 10%

        Else

            Target.Offset(0, 1).Value = Target.Value

        End If

       

        ' تلوين الخلية

        If Target.Value > 1000 Then

            Target.Interior.Color = RGB(255, 255, 0) ' أصفر

        Else

            Target.Interior.Color = xlNone

        End If

    End If

 

Finalize:

    Application.EnableEvents = True

End Sub

 

 

هذه الأكواد العشرة تشكل الأساس المتين لأي عمل متقدم في VBA. تذكر:

1. الممارسة المستمرة هي مفتاح الإتقان

2. التخطيط الجيد قبل الكتابة يوفر الوقت والجهد

3. التوثيق والتعليقات تجعل الكود مفهوماً للآخرين

4. اختبار الكود خطوة بخطوة يمنع الأخطاء

 

ابدأ بتطبيق هذه الأكواد في مشاريعك الصغيرة، ثم تقدم gradually إلى مشاريع أكثر تعقيداً.

 

 

 📌 أساسيات VBA والبرمجة

- `Sub` - `Function` - `Dim` - `Set` - `As` - `End` - `Call` 

- `Option Explicit` - `Public` - `Private` - `Static`

 📌 هياكل التحكم والمنطق

- `If Then Else` - `Select Case` - `For Next` - `For Each` - `Do While` - `Do Until` 

- `And` - `Or` - `Not` - `ElseIf` - `Loop` - `Exit For` - `Exit Do`

 📌 الكائنات الرئيسية في Excel

- `Workbook` - `Worksheet` - `Range` - `Cells` - `Rows` - `Columns` 

- `ActiveWorkbook` - `ThisWorkbook` - `ActiveSheet` - `Sheets` - `Worksheets`

 📌 الخلايا والنطاقات

- `Value` - `Formula` - `FormulaR1C1` - `Address` - `Offset` - `Resize` 

- `CurrentRegion` - `UsedRange` - `End` - `Find` - `Copy` - `PasteSpecial`

📌 الأحداث

- `Worksheet_Change` - `Worksheet_SelectionChange` - `Workbook_Open` 

- `Workbook_BeforeClose` - `OnKey` - `OnTime`

 📌 التفاعل مع المستخدم

- `MsgBox` - `InputBox` - `UserForm` - `TextBox` - `ComboBox` - `CommandButton` 

- `Show` - `Hide` - `Load` - `Unload`

 📌 معالجة الأخطاء

- `On Error` - `On Error Resume Next` - `On Error GoTo` - `Err Object` 

- `Err.Number` - `Err.Description` - `Resume` - `Clear`

 📌 العمليات الحسابية والدوال

- `Math Functions` - `String Functions` - `Date Functions` 

- `Len` - `Left` - `Right` - `Mid` - `InStr` - `Replace` - `Format`

 

 📌 الملفات والمجلدات

- `Dir` - `MkDir` - `RmDir` - `Kill` - `FileCopy` - `Name` 

- `Open` - `Close` - `Write` - `Input` - `Line Input`

 📌 التحكم في التطبيق

- `Application` - `ScreenUpdating` - `DisplayAlerts` - `Calculation` 

- `EnableEvents` - `StatusBar` - `Wait` - `OnTime`

 📌 المصفوفات والمجموعات

- `Array` - `Collection` - `Dictionary` - `ReDim` - `Preserve` 

- `UBound` - `LBound` - `Add` - `Remove` - `Count`

📌 التحكم في الشكل والتنسيق

- `Font` - `Color` - `Interior` - `Borders` - `NumberFormat` 

- `AutoFit` - `Merge` - `WrapText` - `HorizontalAlignment`

 📌 أدوات متقدمة

- `API` - `Class Module` - `Collection` - `Early Binding` - `Late Binding` 

- `RegEx` - `FileSystemObject` - `SQL in VBA` - `ADO` - `QueryTables`

 📌 التصحيح والأداء

- `Debug.Print` - `Immediate Window` - `Watch Window` - `Breakpoint` 

- `Step Into` - `Step Over` - `Local Window` - `Error Handling`

 


NameE-MailNachricht