# الدليل الشامل لـ VBA في Excel – من الصفر إلى الاحتراف
الدليل الشامل لـ VBA في Excel
أهمية VBA، أساسياتها، وتطبيقاتها العملية في أتمتة مهام Excel
VBA (Visual Basic for Applications) هي لغة برمجة مدمجة في Excel تتيح لك أتمتة المهام المتكررة، إنشاء دوال مخصصة، وتطوير تطبيقات تفاعلية داخل بيئة Excel. هذا الدليل يقدم لك كل ما تحتاج معرفته عن VBA وأهميتها في تحسين إنتاجيتك.
---
## المحتويات
1. [ما هي VBA ولماذا هي مهمة؟](#أولاً-ما-هي-vba-ولماذا-هي-مهمة)
2. [بيئة العمل في VBA](#ثانياً-بيئة-العمل-في-vba)
3. [أساسيات لغة VBA](#ثالثاً-أساسيات-لغة-vba)
4. [المتغيرات وأنواع البيانات](#رابعاً-المتغيرات-وأنواع-البيانات)
5. [الهياكل الشرطية والحلقات](#خامساً-الهياكل-الشرطية-والحلقات)
6. [التعامل مع الخلايا والنطاقات](#سادساً-التعامل-مع-الخلايا-والنطاقات)
7. [إنشاء دوال مخصصة (UDF)](#سابعاً-إنشاء-دوال-مخصصة-udf)
8. [التعامل مع الأحداث (Events)](#ثامناً-التعامل-مع-الأحداث-events)
9. [إنشاء نماذج المستخدم (UserForms)](#تاسعاً-إنشاء-نماذج-المستخدم-userforms)
10. [نصائح وحيل متقدمة في VBA](#عاشراً-نصائح-وحيل-متقدمة-في-vba)
11. [الفرق بين VBA و Power Query و Power BI](#حادي-عشر-الفرق-بين-vba-و-power-query-و-power-bi)
---
## أولاً: ما هي VBA ولماذا هي مهمة؟
1
ما هي VBA؟
VBA هي اختصار لـ Visual Basic for Applications، وهي لغة برمجة طورتها مايكروسوفت لتضمينها في تطبيقات Office مثل Excel وWord وAccess. تتيح VBA للمستخدمين كتابة أكواد برمجية لأتمتة المهام وإضافة وظائف جديدة غير موجودة في الواجهة الأساسية للبرنامج.
🤖 أتمتة المهام
تنفيذ مهام متكررة بنقرة زر واحدة
📊 دوال مخصصة
إنشاء دوال جديدة لحسابات معقدة
🔄 تفاعل مع التطبيقات
التواصل مع تطبيقات Office الأخرى
🎨 واجهات مخصصة
بناء نماذج وأدوات تفاعلية
### أهمية VBA في Excel
| المجال | الفائدة |
|--------|---------|
| **توفير الوقت** | أتمتة المهام التي تستغرق ساعات في ثوانٍ |
| **تقليل الأخطاء** | تنفيذ العمليات بدقة متناهية دون تدخل بشري |
| **تخصيص Excel** | إضافة ميزات وأدوات غير موجودة في البرنامج الأساسي |
| **تحليل البيانات** | معالجة كميات كبيرة من البيانات بكفاءة |
| **إنشاء تقارير** | توليد تقارير احترافية بشكل تلقائي |
---
## ثانياً: بيئة العمل في VBA
2
محرر VBA (VBE)
محرر VBA (Visual Basic Editor) هو البيئة التي تكتب فيها أكواد VBA. يمكن الوصول إليه من خلال:
⌨️ اختصار لوحة المفاتيح
اضغط Alt + F11
📋 من شريط المطور
المطور ← Visual Basic
### مكونات محرر VBA
📁 مستكشف المشروع
يعرض جميع المصنفات المفتوحة ومكوناتها
📝 نافذة الكود
مكان كتابة وتحرير الأكواد
🪟 نافذة الخصائص
عرض وتعديل خصائص الكائنات
🔍 نافذة المراقبة
متابعة قيم المتغيرات أثناء التنفيذ

واجهة محرر VBA في Excel
---
## ثالثاً: أساسيات لغة VBA
3
أساسيات لغة VBA
### 1. الإجراءات (Procedures)
#### الإجراء الفرعي (Sub)
```vba
Sub اسم_الإجراء()
' الكود هنا
End Sub
```
**مثال:**
```vba
Sub ترحيب()
MsgBox "مرحباً بك في عالم VBA!"
End Sub
```
#### الدالة (Function)
```vba
Function اسم_الدالة(المعاملات) As نوع_البيانات
' الكود هنا
اسم_الدالة = النتيجة
End Function
```
**مثال:**
```vba
Function مضاعفة(رقم As Double) As Double
مضاعفة = رقم * 2
End Function
```
### 2. التعليقات
```vba
' هذا تعليق من سطر واحد
/*
هذا تعليق
متعدد الأسطر
*/
```
### 3. الكائنات (Objects)
في VBA، كل شيء يعتبر كائناً:
| الكائن | الوصف | مثال |
|--------|-------|------|
| **Application** | تطبيق Excel | `Application.ScreenUpdating = False` |
| **Workbook** | مصنف Excel | `Workbooks("Book1.xlsx").Activate` |
| **Worksheet** | ورقة عمل | `Worksheets("Sheet1").Range("A1")` |
| **Range** | نطاق من الخلايا | `Range("A1:B10").Select` |
---
## رابعاً: المتغيرات وأنواع البيانات
4
المتغيرات وأنواع البيانات
### تعريف المتغيرات
```vba
Dim اسم_المتغير As نوع_البيانات
```
### أنواع البيانات الأساسية
| النوع | الوصف | النطاق | مثال |
|-------|-------|--------|------|
| **Integer** | عدد صحيح | -32,768 إلى 32,767 | `Dim x As Integer` |
| **Long** | عدد صحيح كبير | -2,147,483,648 إلى 2,147,483,647 | `Dim y As Long` |
| **Double** | عدد عشري | كبير جداً | `Dim z As Double` |
| **String** | نص | حتى 2 مليار حرف | `Dim name As String` |
| **Boolean** | قيمة منطقية | True أو False | `Dim flag As Boolean` |
| **Date** | تاريخ ووقت | 100-1-1 إلى 9999-12-31 | `Dim dt As Date` |
| **Variant** | أي نوع | أي قيمة | `Dim v As Variant` |
### ثوابت
```vba
Const PI As Double = 3.14159
Const COMPANY_NAME As String = "عمالقة الإكسيل"
```
### نطاق المتغيرات
| النطاق | التعريف | الوصف |
|--------|---------|-------|
| **محلي** | داخل الإجراء | يظهر فقط داخل الإجراء |
| **خاص بالوحدة** | أعلى الوحدة بـ `Private` | يظهر في كل الإجراءات بالوحدة |
| **عام** | أعلى الوحدة بـ `Public` | يظهر في كل وحدات المشروع |
**مثال:**
```vba
Public globalVar As Integer ' متغير عام
Sub مثال1()
Dim localVar As Integer ' متغير محلي
localVar = 10
globalVar = 20
End Sub
```
---
## خامساً: الهياكل الشرطية والحلقات
5
الهياكل الشرطية والحلقات
### 1. If...Then...Else
**الصيغة الأساسية:**
```vba
If الشرط Then
' الكود إذا تحقق الشرط
Else
' الكود إذا لم يتحقق الشرط
End If
```
**مثال:**
```vba
Sub تقييم_الدرجة()
Dim الدرجة As Integer
الدرجة = Range("A1").Value
If الدرجة >= 90 Then
MsgBox "ممتاز"
ElseIf الدرجة >= 80 Then
MsgBox "جيد جداً"
ElseIf الدرجة >= 70 Then
MsgBox "جيد"
Else
MsgBox "تحتاج إلى تحسين"
End If
End Sub
```
### 2. Select Case
**الصيغة:**
```vba
Select Case التعبير
Case القيمة1
' الكود
Case القيمة2
' الكود
Case Else
' الكود
End Select
```
**مثال:**
```vba
Sub تصنيف_اليوم()
Dim اليوم As Integer
اليوم = Weekday(Date)
Select Case اليوم
Case 1
MsgBox "الأحد"
Case 2
MsgBox "الإثنين"
Case 3
MsgBox "الثلاثاء"
Case 4
MsgBox "الأربعاء"
Case 5
MsgBox "الخميس"
Case 6
MsgBox "الجمعة"
Case 7
MsgBox "السبت"
End Select
End Sub
```
### 3. For...Next
**الصيغة:**
```vba
For عداد = البداية To النهاية [Step الخطوة]
' الكود
Next عداد
```
**مثال:**
```vba
Sub جمع_الأعداد()
Dim i As Integer
Dim المجموع As Integer
المجموع = 0
For i = 1 To 10
المجموع = المجموع + i
Next i
MsgBox "مجموع الأعداد من 1 إلى 10 = " & المجموع
End Sub
```
### 4. For Each...Next
**الصيغة:**
```vba
For Each عنصر In مجموعة
' الكود
Next عنصر
```
**مثال:**
```vba
Sub تلوين_الخلايا()
Dim خلية As Range
For Each خلية In Range("A1:A10")
If خلية.Value > 50 Then
خلية.Interior.Color = RGB(0, 255, 0) ' أخضر
Else
خلية.Interior.Color = RGB(255, 0, 0) ' أحمر
End If
Next خلية
End Sub
```
### 5. Do...Loop
**الصيغة:**
```vba
Do While الشرط
' الكود
Loop
```
**مثال:**
```vba
Sub حتى_تصل_الخلايا()
Dim i As Integer
i = 1
Do While Cells(i, 1).Value ""
Cells(i, 2).Value = Cells(i, 1).Value * 2
i = i + 1
Loop
End Sub
```
---
## سادساً: التعامل مع الخلايا والنطاقات
6
التعامل مع الخلايا والنطاقات
### 1. الإشارة إلى الخلايا
```vba
' الطريقة الأولى: باستخدام Range
Range("A1").Value = 100
' الطريقة الثانية: باستخدام Cells
Cells(1, 1).Value = 100
' الطريقة الثالثة: باستخدام الاسم
Range("الاسم_المعرف").Value = 100
```
### 2. نطاقات متعددة
```vba
' نطاق مستمر
Range("A1:C10").Select
' نطاق غير مستمر
Range("A1:A10, C1:C10, E1:E10").Select
' نطاق متغير
Range(Cells(1, 1), Cells(10, 3)).Select
```
### 3. خصائص النطاق
| الخاصية | الوصف | مثال |
|----------|-------|-------|
| **Value** | قيمة الخلية | `Range("A1").Value = 5` |
| **Formula** | الصيغة | `Range("A1").Formula = "=SUM(B1:B10)"` |
| **Interior** | تنسيق الخلفية | `Range("A1").Interior.Color = RGB(255,0,0)` |
| **Font** | تنسيق الخط | `Range("A1").Font.Bold = True` |
| **Borders** | الحدود | `Range("A1").Borders.LineStyle = xlContinuous` |
### 4. دوال شائعة للنطاقات
```vba
' حساب عدد الصفوف والعمود
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' تحديد نطاق مستخدم
Dim usedRange As Range
Set usedRange = ActiveSheet.UsedRange
' نسخ ولصق
Range("A1:A10").Copy Destination:=Range("B1")
' فرز البيانات
Range("A1:C100").Sort Key1:=Range("A1"), Order1:=xlAscending
```
### 5. مثال عملي: تنظيف البيانات
```vba
Sub تنظيف_البيانات()
Dim lastRow As Long
Dim i As Long
' تحديد آخر صف
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' حذف الصفوف الفارغة
For i = lastRow To 1 Step -1
If WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next i
' إزالة المسافات الزائدة
For i = 1 To lastRow
If Not IsEmpty(Cells(i, 1)) Then
Cells(i, 1).Value = Trim(Cells(i, 1).Value)
End If
Next i
MsgBox "تم تنظيف البيانات بنجاح!"
End Sub
```
---
## سابعاً: إنشاء دوال مخصصة (UDF)
7
إنشاء دوال مخصصة (UDF)
**UDF** (User Defined Functions) هي دوال يمكنك إنشاؤها بنفسك واستخدامها في الخلايا تماماً مثل دوال Excel المدمجة.
### 1. دالة بسيطة
```vba
Function حساب_الضريبة(المبلغ As Double) As Double
حساب_الضريبة = المبلغ * 0.15
End Function
```
**الاستخدام في الخلية:**
```
=حساب_الضريبة(A1)
```
### 2. دالة بشروط
```vba
Function تقدير_الدرجة(الدرجة As Integer) As String
Select Case الدرجة
Case Is >= 90
تقدير_الدرجة = "ممتاز"
Case Is >= 80
تقدير_الدرجة = "جيد جداً"
Case Is >= 70
تقدير_الدرجة = "جيد"
Case Is >= 60
تقدير_الدرجة = "مقبول"
Case Else
تقدير_الدرجة = "ضعيف"
End Select
End Function
```
### 3. دالة مع عدة معاملات
```vba
Function معدل_الربح(المبيعات As Double, التكاليف As Double, _
Optional نسبة_الهامش As Double = 0.2) As Double
Dim صافي_الربح As Double
صافي_الربح = المبيعات - التكاليف
معدل_الربح = صافي_الربح / المبيعات
End Function
```
### 4. دالة مع حلقة
```vba
Function مجموع_الأعداد_الزوجية(النطاق As Range) As Double
Dim خلية As Range
Dim المجموع As Double
المجموع = 0
For Each خلية In النطاق
If IsNumeric(خلية.Value) And خلية.Value Mod 2 = 0 Then
المجموع = المجموع + خلية.Value
End If
Next خلية
مجموع_الأعداد_الزوجية = المجموع
End Function
```
---
## ثامناً: التعامل مع الأحداث (Events)
8
التعامل مع الأحداث (Events)
الأحداث هي أكواد تُنفذ تلقائياً عند حدوث إجراء معين في Excel.
### 1. أحداث ورقة العمل (Worksheet Events)
```vba
' يتم تنفيذه عند تغيير قيمة أي خلية في الورقة
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Target.Offset(0, 1).Value = Target.Value * 2
End If
End Sub
' يتم تنفيذه عند تحديد خلية
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A1").Value = "تم تحديد الخلية " & Target.Address
End Sub
' يتم تنفيذه عند النقر المزدوج
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
MsgBox "قيمة الخلية: " & Target.Value
Cancel = True
End If
End Sub
```
### 2. أحداث المصنف (Workbook Events)
```vba
' يتم تنفيذه عند فتح المصنف
Private Sub Workbook_Open()
MsgBox "مرحباً بكم في هذا المصنف!"
Sheets("الرئيسية").Activate
End Sub
' يتم تنفيذه عند حفظ المصنف
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Range("A1").Value = "" Then
MsgBox "لا يمكن حفظ الملف - الخلية A1 فارغة"
Cancel = True
End If
End Sub
' يتم تنفيذه عند إغلاق المصنف
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("هل تريد حفظ التغييرات؟", vbYesNo) = vbYes Then
Me.Save
End If
End Sub
```
### 3. أحداث التطبيق (Application Events)
```vba
' يجب تعريف هذا الكود في وحدة Class
Private WithEvents ExcelApp As Application
Private Sub ExcelApp_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "تم فتح المصنف: " & Wb.Name
End Sub
Private Sub ExcelApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' تنفيذ كود عند تغيير أي خلية في أي مصنف مفتوح
End Sub
```
---
## تاسعاً: إنشاء نماذج المستخدم (UserForms)
9
إنشاء نماذج المستخدم (UserForms)
### 1. إنشاء نموذج مستخدم
1. في محرر VBA: Insert → UserForm
2. إضافة أدوات من Toolbox
3. كتابة الأكواد الخاصة بالنموذج
### 2. أدوات النموذج الشائعة
| الأداة | الوصف | الاستخدام |
|--------|-------|-----------|
| **Label** | نص ثابت | عناوين وتسميات |
| **TextBox** | حقل إدخال نص | إدخال بيانات |
| **CommandButton** | زر | تنفيذ أوامر |
| **ComboBox** | قائمة منسدلة | اختيار من قائمة |
| **ListBox** | قائمة | عرض خيارات متعددة |
| **CheckBox** | خانة اختيار | اختيار خيارات متعددة |
| **OptionButton** | زر اختيار | اختيار خيار واحد |
| **SpinButton** | زر تدوير | اختيار رقم |
| **MultiPage** | صفحات متعددة | تنظيم المحتوى |
### 3. مثال: نموذج إدخال بيانات
```vba
' الكود في وحدة النموذج (UserForm)
Private Sub UserForm_Initialize()
' تهيئة النموذج
txt_اسم.Text = ""
txt_العمر.Text = ""
cbo_القسم.AddItem "المبيعات"
cbo_القسم.AddItem "التسويق"
cbo_القسم.AddItem "المالية"
cbo_القسم.AddItem "الموارد البشرية"
cbo_القسم.ListIndex = 0
End Sub
Private Sub btn_حفظ_Click()
' التحقق من صحة البيانات
If txt_اسم.Text = "" Then
MsgBox "يرجى إدخال الاسم"
txt_اسم.SetFocus
Exit Sub
End If
If Not IsNumeric(txt_العمر.Text) Then
MsgBox "يرجى إدخال عمر صحيح"
txt_العمر.SetFocus
Exit Sub
End If
' إضافة البيانات إلى الورقة
Dim lastRow As Long
lastRow = Sheets("البيانات").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("البيانات").Cells(lastRow, 1).Value = txt_اسم.Text
Sheets("البيانات").Cells(lastRow, 2).Value = txt_العمر.Text
Sheets("البيانات").Cells(lastRow, 3).Value = cbo_القسم.Value
Sheets("البيانات").Cells(lastRow, 4).Value = Date
MsgBox "تم حفظ البيانات بنجاح!"
' مسح الحقول
txt_اسم.Text = ""
txt_العمر.Text = ""
cbo_القسم.ListIndex = 0
txt_اسم.SetFocus
End Sub
Private Sub btn_إلغاء_Click()
Unload Me
End Sub
```
### 4. استدعاء النموذج
```vba
Sub عرض_نموذج_الإدخال()
frm_إدخال_بيانات.Show
End Sub
```
---
## عاشراً: نصائح وحيل متقدمة في VBA
10
نصائح وحيل متقدمة في VBA
### 1. تحسين أداء الكود
```vba
Sub تشغيل_سريع()
' إيقاف تحديث الشاشة
Application.ScreenUpdating = False
' إيقاف الحسابات التلقائية
Application.Calculation = xlCalculationManual
' إيقاف الأحداث
Application.EnableEvents = False
' ===== الكود الأساسي هنا =====
' إعادة تفعيل الإعدادات
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
```
### 2. معالجة الأخطاء
```vba
Sub معالجة_الأخطاء()
On Error GoTo خطأ
' الكود الذي قد يسبب خطأ
Dim x As Integer
x = 100 / 0
Exit Sub
خطأ:
MsgBox "حدث خطأ: " & Err.Description
Resume Next
End Sub
```
### 3. دوال مساعدة مفيدة
```vba
' التحقق من وجود ورقة عمل
Function هل_الورقة_موجودة(اسم_الورقة As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(اسم_الورقة)
هل_الورقة_موجودة = Not ws Is Nothing
Set ws = Nothing
End Function
' إضافة ورقة إذا لم تكن موجودة
Sub إضافة_ورقة_إذا_لم_توجد(اسم_الورقة As String)
If Not هل_الورقة_موجودة(اسم_الورقة) Then
Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = اسم_الورقة
End If
End Sub
```
### 4. إنشاء قوائم مخصصة في الشريط
```vba
' يجب إضافة هذا الكود في وحدة نمطية
Sub إنشاء_قائمة_مخصصة()
' إضافة زر في شريط الوصول السريع أو إنشاء علامة تبويب مخصصة
' يتطلب ذلك معرفة XML للشريط
End Sub
```
### 5. التفاعل مع الملفات
```vba
Sub فتح_ملف_نصي()
Dim fileNum As Integer
fileNum = FreeFile
Open "C:\data.txt" For Input As #fileNum
Dim lineData As String
Dim i As Integer
i = 1
Do While Not EOF(fileNum)
Line Input #fileNum, lineData
Cells(i, 1).Value = lineData
i = i + 1
Loop
Close #fileNum
End Sub
```
---
## حادي عشر: الفرق بين VBA و Power Query و Power BI
مقارنة: VBA vs Power Query vs Power BI
| الميزة |
VBA |
Power Query |
Power BI |
| أتمتة المهام |
✅ ممتاز |
❌ محدود |
❌ |
| تنظيف وتحويل البيانات |
✅ يدوي |
✅ ممتاز |
✅ ممتاز |
| واجهات تفاعلية |
✅ ممتاز |
❌ |
✅ ممتاز |
| التصور والخرائط |
❌ محدود |
❌ |
✅ ممتاز |
| سهولة التعلم |
⭐️⭐️⭐️ متوسط |
⭐️⭐️⭐️⭐️⭐️ سهل |
⭐️⭐️⭐️⭐️ سهل |
| تكامل مع Excel |
✅ كامل |
✅ كامل |
✅ عبر الاستيراد |
### متى تستخدم كل أداة؟
| الأداة | أفضل استخدام |
|--------|-------------|
| **VBA** | أتمتة المهام، إنشاء دوال مخصصة، نماذج تفاعلية، معالجة بيانات معقدة |
| **Power Query** | استيراد وتنظيف وتحويل البيانات من مصادر متعددة |
| **Power BI** | إنشاء تقارير تفاعلية متقدمة، لوحات معلومات، تصور البيانات |
---
🚀 عمالقة الإكسيل
في عمالقة الإكسيل، نؤمن بأن إتقان VBA هو مفتاح الانتقال من مستخدم عادي إلى خبير برمجي. نقدم لك هذا الدليل لتكون محترفاً في برمجة VBA.
عمالقة الإكسيل... حيث تتحول الأفكار إلى برامج احترافية تخدم الجميع.
---
## 📋 **ملخص المحتويات**
| القسم | المحتوى |
|--------|---------|
| 1️⃣ | ما هي VBA ولماذا هي مهمة – التعريف والأهمية |
| 2️⃣ | بيئة العمل في VBA – محرر VBA ومكوناته |
| 3️⃣ | أساسيات لغة VBA – الإجراءات، الدوال، الكائنات |
| 4️⃣ | المتغيرات وأنواع البيانات – تعريف واستخدام |
| 5️⃣ | الهياكل الشرطية والحلقات – If, Select, For, Do |
| 6️⃣ | التعامل مع الخلايا والنطاقات – الإشارة والتنسيق |
| 7️⃣ | إنشاء دوال مخصصة (UDF) – دوال للمستخدم |
| 8️⃣ | التعامل مع الأحداث – أحداث الورقة والمصنف |
| 9️⃣ | إنشاء نماذج المستخدم – UserForms |
| 🔟 | نصائح وحيل متقدمة – تحسين الأداء ومعالجة الأخطاء |
| 1️⃣1️⃣ | المقارنة مع Power Query و Power BI |
---
## ⚠️ **معلومات هامة**
- **VBA** مدعومة في جميع إصدارات Excel ولا توجد خطط لإزالتها.
- يمكن تشغيل أكواد VBA على **Windows** فقط، أما على **Mac** فمدعومة بشكل محدود.
- يجب **تمكين وحدات الماكرو** لاستخدام VBA (ملف → خيارات → مركز الثقة).
- لحماية الكود، يمكنك **قفل المشروع بكلمة مرور** من خلال خصائص المشروع.
🎉 **الكود جاهز للاستخدام! ابدأ في أتمتة مهامك اليوم.**