كيفية عمل برنامج Excel لإدارة المخازن: تتبع الواردات والصادرات والجرد باستخدام VBA
إدارة المخازن بفعالية تعتبر عنصرًا مهمًا في نجاح أي مشروع تجاري. من خلال استخدام برنامج Excel، يمكنك بسهولة تنظيم وتتبع عمليات المخزون الوارد والصادر والجرد، خاصة عند دعم Excel بواسطة أدوات برمجية مثل VBA (Visual Basic for Applications). سنقدم لك في هذا المقال شرحًا تفصيليًا لبرنامج Excel المخصص لإدارة المخازن مثل المثال الموضح في الصورة المرفقة.
مميزات برنامج إدارة المخازن باستخدام Excel
يتيح لك برنامج Excel لإدارة المخازن تتبع جميع العمليات المتعلقة بالمخزون بسهولة. من خلال واجهة بسيطة وأدوات قوية مثل VBA، يمكنك:
إدارة الصادرات والواردات: يساعدك البرنامج في تسجيل كل العمليات الواردة إلى المخزن والمخرجات بشكل دقيق.
إجراء الجرد: يمكنك تنفيذ عمليات الجرد الدوري بسرعة ودقة لضمان عدم وجود نقص أو زيادة غير مبررة في المخزون.
إضافة وتعديل الأصناف: يسمح لك البرنامج بإضافة أصناف جديدة أو تعديل البيانات الخاصة بالأصناف الحالية بكل سهولة.
توليد الفواتير: بمجرد تسجيل أي عملية بيع أو خروج من المخزون، يقوم البرنامج تلقائيًا بتوليد فاتورة مخصصة بتنسيق PDF.
شرح واجهة المستخدم الرئيسية
تحتوي واجهة البرنامج على مجموعة من الأزرار التي تتيح لك التنقل بين مختلف العمليات:
وارد المخزن: هذا الخيار مخصص لتسجيل المنتجات أو المواد التي تدخل إلى المخزن.
الصادر: لتسجيل المنتجات التي تم إخراجها من المخزن سواء كانت مباعة أو تم إرسالها إلى جهة أخرى.
الجرد: يسمح لك بإجراء عملية جرد دقيقة للمخزون المتوفر.
إضافة الصنف: يمكن إضافة صنف جديد ببيانات مثل الاسم، السعر، الكمية، ورقم الفاتورة.
تعديل الصنف: يساعدك في تعديل تفاصيل الأصناف الموجودة مثل الأسعار أو الكميات.
إضافة الصنف: تبدأ باستخدام خيار “إضافة الصنف”، وتملأ الحقول المطلوبة مثل رقم الفاتورة، التاريخ، الصنف، الكمية، وسعر البيع.
تسجيل الواردات والصادرات: يمكنك الانتقال إلى قسم “وارد المخزن” أو “الصادر” لتسجيل أي حركة جديدة للمخزون. هذا يتيح لك تتبع كل الصادرات والواردات بشكل دقيق.
إصدار الفواتير: بمجرد إدخال تفاصيل أي عملية، يتم توليد فاتورة بشكل تلقائي تُحفظ كملف PDF.
أهمية الجرد وتقرير المخزون
من خلال زر “الجرد”، يمكنك إجراء مراجعة دورية لجميع الأصناف المخزنة. يعمل البرنامج على تحديث البيانات فورًا لضمان حصولك على معلومات دقيقة عند الحاجة، وهذا يساعد في اتخاذ قرارات سريعة وفعّالة بشأن الطلبات والمخزون المتاح.
كيفية تخصيص البرنامج
يمكن تخصيص إعدادات البرنامج بسهولة وفقًا لاحتياجات المستخدم. على سبيل المثال، يمكنك تغيير الألوان أو تخصيص الأعمدة التي ترغب في رؤيتها عند إدخال البيانات. هذه المرونة تجعل البرنامج ملائمًا لأنواع مختلفة من المشاريع.
لماذا Excel هو الخيار الأمثل لإدارة المخازن؟
سهولة الاستخدام: يعتبر Excel أداة بسيطة وسهلة الاستخدام، مما يجعله مثاليًا للأشخاص الذين لا يمتلكون خبرة تقنية متقدمة.
المرونة والتخصيص: يمكن تخصيص البرنامج ليشمل خصائص معينة تناسب احتياجات شركتك، مثل الجرد الدوري أو إعداد تقارير مخصصة.
التكلفة: استخدام Excel لإدارة المخازن لا يتطلب استثمارًا كبيرًا في البرمجيات، ويمكن إعداده بسهولة.
خلاصة
يقدم لك برنامج Excel لإدارة المخازن المدعوم بـVBA حلاً مثاليًا لإدارة العمليات اليومية للمخزون بطريقة فعّالة وسهلة. من خلال هذا البرنامج، يمكنك تتبع المخزون الوارد والصادر، إجراء الجرد، توليد الفواتير، وتخصيص إعدادات البرنامج بما يناسب احتياجاتك. استخدام Excel في هذه العمليات يساعد على تنظيم العمل وتقليل الأخطاء البشرية بشكل كبير.
شرح الأكواد المستخدمة في البرنامج
حفظ البيانات من النموذج إلى ورقة “stc”
Private Sub CommandButton7_Click()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets(“stc”)
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
If lastRow < 3 Then
lastRow = 3
Else
lastRow = lastRow + 1
End If
ws.Cells(lastRow, 1).Value = TextBox1.Text
ws.Cells(lastRow, 2).Value = TextBox2.Text
TextBox1.Text = “”
TextBox2.Text = “”
End Sub
شرح الكود
هذا الكود مخصص لحفظ البيانات المدخلة من النموذج (UserForm) في ورقة العمل المسماة “stc”. يتم ذلك عند الضغط على زر CommandButton7. التفاصيل كالتالي:
Set ws = ThisWorkbook.Sheets(“stc”): يتم تحديد ورقة العمل “stc” ليتم التعامل معها.
lastRow: يتم حساب آخر صف يحتوي على بيانات في العمود “A” لتحديد أين سيتم إضافة البيانات الجديدة.
TextBox1.Text و TextBox2.Text: يتم ترحيل البيانات المدخلة في مربعي النص إلى العمودين “A” و”B” في ورقة العمل.
مسح مربعات النص: بعد إضافة البيانات، يتم إفراغ مربعات النص ليكون النموذج جاهزًا لإدخال بيانات جديدة.
حفظ البيانات من النموذج إلى ورقة “ent”
Private Sub CommandButton8_Click()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets(“ent”)
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
If lastRow < 3 Then
lastRow = 3
Else
lastRow = lastRow + 1
End If
ws.Cells(lastRow, 1).Value = TextBox3.Text
ws.Cells(lastRow, 2).Value = TextBox4.Text
ws.Cells(lastRow, 3).Value = TextBox5.Text
ws.Cells(lastRow, 4).Value = TextBox6.Text
ws.Cells(lastRow, 5).Value = TextBox7.Text
ws.Cells(lastRow, 6).Value = Label42.Caption
ws.Cells(lastRow, 7).Value = TextBox9.Text
‘delete after insert date
TextBox3.Text = “”
TextBox4.Text = “”
TextBox5.Text = “”
TextBox6.Text = “”
TextBox7.Text = “”
TextBox9.Text = “”
Label42.Caption = “”
MsgBox “Nice WoOoRK!”, vbInformation
End Sub
شرح الكود:
هذا الكود مخصص لترحيل البيانات المدخلة من النموذج (UserForm) إلى ورقة العمل المسماة “ent” عند الضغط على زر CommandButton8. وظيفته تشمل:
Set ws = ThisWorkbook.Sheets(“ent”): يتم تحديد ورقة العمل “ent” ليتم التعامل معها.
lastRow: يتم حساب آخر صف يحتوي على بيانات في العمود “A” لتحديد أين سيتم إضافة البيانات الجديدة.
TextBox3.Text إلى TextBox9.Text: يتم ترحيل البيانات المدخلة من مربعات النص المختلفة إلى الأعمدة من “A” إلى “G” في ورقة العمل.
Label42.Caption: يتم ترحيل النص المعروض في Label42 إلى العمود السادس.
مسح مربعات النص والتسمية: بعد ترحيل البيانات، يتم إفراغ مربعات النص والعلامة ليكون النموذج جاهزًا لإدخال بيانات جديدة.
رسالة تأكيد: بعد إتمام العملية، تظهر رسالة للمستخدم “Nice WoOoRK!” كإشعار على نجاح العملية.
كود: البحث باستخدام SpinButton
Private Sub SpinButton2_Change()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
Dim currentRow As Long
Dim searchRange As Range
Set ws = ThisWorkbook.Sheets(“out”)
searchValue = TextBox10.Value
‘ تعيين قيمة افتراضية لـ currentRow إذا لم تكن Tag مُعينة
If IsNumeric(Me.Tag) Then
currentRow = CLng(Me.Tag)
Else
currentRow = 3 ‘ تعيين القيمة الافتراضية إلى الصف 3
End If
‘ تحديد نطاق البحث
Set searchRange = ws.Range(“A3:A” & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
‘ البحث عن الخلية المطابقة
Set foundCell = searchRange.Find(What:=searchValue, After:=ws.Cells(currentRow, 1), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not foundCell Is Nothing Then
If SpinButton2.Value = 1 Then
‘ البحث عن الخلية التالية
If foundCell.Row < ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Then
Set foundCell = searchRange.FindNext(foundCell)
End If
ElseIf SpinButton2.Value = 0 Then
‘ البحث عن الخلية السابقة
If foundCell.Row > 3 Then
Set foundCell = searchRange.FindPrevious(foundCell)
End If
End If
If Not foundCell Is Nothing Then
‘ عرض البيانات في TextBox
TextBox10.Value = ws.Cells(foundCell.Row, 1).Value ‘ بيانات A
TextBox11.Value = ws.Cells(foundCell.Row, 2).Value ‘ بيانات B
TextBox12.Value = ws.Cells(foundCell.Row, 3).Value ‘ بيانات C
TextBox13.Value = ws.Cells(foundCell.Row, 4).Value ‘ بيانات D
‘ حفظ الصف الحالي في Tag
Me.Tag = foundCell.Row
Else
MsgBox “لا توجد بيانات مطابقة في النطاق المحدد”, vbExclamation
End If
Else
MsgBox “القيمة غير موجودة”, vbExclamation
End If
End Sub
شرح الكود:
هذا الكود يستخدم للتحكم في عرض البيانات في مربعات النص (TextBox) بناءً على إدخال المستخدم في SpinButton، والذي يتم استخدامه للتنقل بين السجلات (الصفوف) في ورقة العمل المسماة “out”. وظيفته هي البحث عن القيم المطابقة للقيمة المدخلة في TextBox10، ثم عرض القيم المقابلة من الأعمدة الأخرى في مربعات النص التالية.
تفاصيل الكود:
Set ws = ThisWorkbook.Sheets(“out”): يتم تحديد ورقة العمل “out” ليتم التعامل معها.
currentRow: يتم تحديد الصف الحالي بناءً على قيمة Tag، وإذا لم تكن موجودة يتم تعيين الصف الافتراضي على أنه الصف الثالث.
searchRange: يتم تحديد نطاق البحث في العمود “A” بدءًا من الصف الثالث إلى آخر صف يحتوي على بيانات.
SpinButton2.Value: يتم التحقق مما إذا كان المستخدم يرغب في الانتقال إلى السجل التالي أو السابق. إذا كانت القيمة 1، يتم البحث عن السجل التالي؛ وإذا كانت 0، يتم البحث عن السجل السابق.
TextBox10 إلى TextBox13: يتم عرض البيانات في مربعات النص بناءً على القيم الموجودة في الصف الذي تم العثور عليه.
Me.Tag = foundCell.Row: يتم حفظ رقم الصف الحالي في الخاصية Tag ليتمكن المستخدم من التنقل بسهولة بين السجلات.
رسائل التحقق: إذا لم يتم العثور على القيم المطلوبة، تظهر رسالة للمستخدم تفيد بعدم وجود القيم المطابقة.
كود: البحث عن السعر بناءً على إدخال المستخدم في TextBox12
Private Sub TextBox12_Change()
Dim ws As Worksheet
Dim rng As Range
Dim foundItem As Range
Dim salePrice As Double
‘ تحديد ورقة العمل (ent)
Set ws = ThisWorkbook.Sheets(“ent”)
‘ تحديد نطاق العمود المطلوب البحث فيه (العمود C)
Set rng = ws.Range(“C:C”)
‘ البحث عن القيمة المدخلة في TextBox12 في العمود C
Set foundItem = rng.Find(What:=TextBox12.Text, LookIn:=xlValues, LookAt:=xlWhole)
‘ إذا تم العثور على العنصر المطابق
If Not foundItem Is Nothing Then
‘ استخراج قيمة السعر من العمود G (الموجودة في نفس صف العنصر)
salePrice = ws.Cells(foundItem.Row, 7).Value
Label43.Caption = salePrice ‘ عرض السعر في Label43
Else
‘ إذا لم يتم العثور على العنصر
Label43.Caption = “السعر غير موجود”
Label44.Caption = “” ‘ يمكن استخدام Label44 لعرض رسالة أو قيمة أخرى إذا لزم الأمر
End If
End Sub
شرح الكود:
هذا الكود يهدف إلى البحث عن قيمة مدخلة في مربع النص (TextBox12) داخل العمود “C” في ورقة العمل المسماة “ent”. إذا تم العثور على العنصر المطابق في العمود “C”، يقوم الكود بجلب السعر المقابل من العمود “G” في نفس الصف، وعرضه في الـ Label43. إذا لم يتم العثور على العنصر، يظهر رسالة في الـ Label43 بأن “السعر غير موجود”.
تفاصيل الكود:
Set ws = ThisWorkbook.Sheets(“ent”): يقوم بتحديد ورقة العمل “ent” التي تحتوي على البيانات.
Set rng = ws.Range(“C
“): يقوم بتحديد نطاق البحث داخل العمود “C”.
Set foundItem = rng.Find: يقوم بالبحث عن القيمة المدخلة في TextBox12 داخل العمود “C”.
salePrice = ws.Cells(foundItem.Row, 7).Value: إذا تم العثور على القيمة، يتم استخراج السعر المقابل من العمود “G” وعرضه في الـ Label43.
If Not foundItem Is Nothing: يتحقق مما إذا كانت القيمة المدخلة موجودة في النطاق، ويعرض النتيجة بناءً على وجود أو عدم وجود العنصر.
كود: حساب الإجمالي بناءً على السعر والكمية المدخلة في TextBox13
Private Sub TextBox13_Change()
Dim salePrice As Double
Dim quantity As Double
Dim total As Double
‘ التحقق مما إذا كانت القيمة في Label43 رقمية
If IsNumeric(Label43.Caption) Then
salePrice = CDbl(Label43.Caption)
Else
salePrice = 0
End If
‘ التحقق مما إذا كانت القيمة في TextBox13 رقمية
If IsNumeric(TextBox13.Text) Then
quantity = CDbl(TextBox13.Text)
Else
quantity = 0
End If
‘ حساب الإجمالي بضرب السعر في الكمية
total = salePrice * quantity
Label44.Caption = total ‘ عرض الإجمالي في Label44
End Sub
شرح الكود:
هذا الكود يعمل على حساب قيمة الإجمالي بناءً على السعر الموجود في الـ Label43 والكمية المدخلة في TextBox13. يتم عرض النتيجة في Label44.
تفاصيل الكود:
If IsNumeric(Label43.Caption): يتحقق إذا كانت قيمة Label43 رقمية (السعر) لتحويلها إلى نوع بيانات رقمي (CDbl).
If IsNumeric(TextBox13.Text): يتحقق مما إذا كانت الكمية المدخلة في TextBox13 رقمية.
total = salePrice * quantity: يحسب إجمالي السعر عن طريق ضرب الكمية في السعر.
Label44.Caption = total: يعرض النتيجة النهائية في Label44
كود: تحديث القيمة في Label48 بناءً على القيم المدخلة في TextBox23 وTextBox26
كود TextBox26_Change
Private Sub TextBox26_Change()
UpdateLabel48
End Sub
- كود TextBox23_Change
Private Sub TextBox23_Change()
UpdateLabel48
End Sub
الكود المشترك: UpdateLabel48
Private Sub UpdateLabel48()
Dim value23 As Double
Dim value26 As Double
Dim result As Double
‘ التحقق مما إذا كانت القيم في TextBox23 و TextBox26 أرقامًا
If IsNumeric(TextBox23.Text) Then
value23 = CDbl(TextBox23.Text)
Else
value23 = 0
End If
If IsNumeric(TextBox26.Text) Then
value26 = CDbl(TextBox26.Text)
Else
value26 = 0
End If
‘ حساب النتيجة بناءً على القيم المدخلة
result = value23 + value26
‘ عرض النتيجة في Label48
Label48.Caption = result
End Sub
شرح الكود:
عند تغيير أي قيمة في TextBox23 أو TextBox26، يتم استدعاء الدالة UpdateLabel48 لحساب النتيجة وعرضها في Label48.
تفاصيل الكود:
IsNumeric: يتحقق إذا كانت القيم المدخلة في TextBox23 وTextBox26 أرقامًا.
CDbl: يقوم بتحويل القيم إلى نوع بيانات رقمي.
result = value23 + value26: يقوم بجمع القيمتين وعرض النتيجة النهائية في Label48.
كود: حساب الفرق بين قيمتين وإظهاره في Label48
Private Sub UpdateLabel48()
Dim num1 As Double
Dim num2 As Double
‘ تحقق من وجود قيمة في TextBox26 وتحويلها إلى رقم
If IsNumeric(TextBox26.Value) Then
num1 = CDbl(TextBox26.Value)
Else
num1 = 0
End If
‘ تحقق من وجود قيمة في TextBox23 وتحويلها إلى رقم
If IsNumeric(TextBox23.Value) Then
num2 = CDbl(TextBox23.Value)
Else
num2 = 0
End If
‘ قم بالطرح وعرض الناتج في Label48
If num1 <> 0 Or num2 <> 0 Then
Label48.Caption = num1 – num2
Else
Label48.Caption = “”
End If
End Sub
شرح الكود:
الكود يقوم بحساب الفرق بين القيم المدخلة في TextBox26 و TextBox23، ثم يعرض النتيجة في Label48.
تفاصيل الكود:
IsNumeric: يتحقق من أن القيم المدخلة في TextBox26 و TextBox23 هي أرقام.
CDbl: يحوّل القيمة المدخلة إلى نوع بيانات رقمي (Double).
Label48.Caption = num1 – num2: يتم حساب الفرق بين الرقمين وعرضه في Label48.
If num1 <> 0 Or num2 <> 0: يتحقق مما إذا كانت أي من القيم المدخلة غير صفرية، وإذا كانت كلا القيمتين صفراً، يتم مسح Label48.
وظيفة الكود:
الهدف: يتم استخدام هذا الكود لعرض الفرق بين قيمتين مدخلتين في مربعي النص TextBox26 و TextBox23 في Label48.
التحقق: يتم التأكد أولاً من أن القيم المدخلة هي أرقام صحيحة قبل القيام بالعملية الحسابية.
كود: حساب مجموع القيم وتحديث القوائم والنماذج
Private Sub TextBox6_Change()
Call CalculateResult
End Sub
Private Sub TextBox7_Change()
Call CalculateResult
End Sub
Private Sub CalculateResult()
Dim result As Double
If IsNumeric(TextBox6.Text) And IsNumeric(TextBox7.Text) Then
result = Val(TextBox6.Text) * Val(TextBox7.Text)
Label42.Caption = result
Else
Label42.Caption = “”
End If
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim lastRow As Long
Dim totalSum As Double
Dim cell As Range
Dim i As Long
‘ تعيين ورقة العمل
Set ws = ThisWorkbook.Sheets(“stc”)
‘ إيجاد آخر صف مستخدم في العمود G
lastRow = ws.Cells(ws.Rows.Count, “G”).End(xlUp).Row
‘ حساب مجموع القيم في العمود G
For Each cell In ws.Range(“G2:G” & lastRow)
If IsNumeric(cell.Value) Then
totalSum = totalSum + cell.Value
End If
Next cell
‘ عرض مجموع القيم في Label45
Me.Label45.Caption = totalSum
‘ إيجاد آخر صف مستخدم في العمود A
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
‘ مسح العناصر السابقة في ComboBox1
ComboBox1.Clear
‘ إضافة العناصر إلى ComboBox1 بدءًا من الصف 3
For i = 3 To lastRow
ComboBox1.AddItem ws.Cells(i, 1).Value
Next i
‘ تحديث التاريخ في Label33 عند تحميل النموذج
Label33.Caption = Format(Date, “dd/mm/yyyy”) ‘ يمكنك تعديل تنسيق التاريخ حسب الحاجة
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
UserForm1.Hide
End Sub
شرح الكود:
- حساب النتيجة عند تغيير القيم في TextBox6 و TextBox7:
TextBox6_Change و TextBox7_Change:
عند تغيير قيمة أي من مربعات النص هذه، يتم استدعاء الدالة CalculateResult.
CalculateResult:
تتحقق هذه الدالة إذا كانت القيم المدخلة في TextBox6 و TextBox7 أرقامًا.
إذا كانت القيم صالحة، يتم ضرب القيمتين معًا ويتم عرض النتيجة في Label42.
إذا كانت أي من القيم غير صالحة، يتم مسح محتويات Label42.
- تهيئة النموذج عند بدء التشغيل (UserForm_Initialize):
UserForm_Initialize:
يتم تعيين ورقة العمل stc في المتغير ws.
يتم البحث عن آخر صف يحتوي على بيانات في العمود G لحساب مجموع القيم.
يتم حساب مجموع القيم الموجودة في العمود G ويتم عرضها في Label45.
يتم ملء القائمة المنسدلة ComboBox1 بقيم من العمود A بدءًا من الصف 3.
يتم تحديث Label33 بالتاريخ الحالي عند تحميل النموذج.
- إخفاء النموذج عند إغلاقه:
UserForm_QueryClose:
عند محاولة إغلاق النموذج، يتم إخفاء النموذج فقط دون إغلاقه نهائيًا.
يتم إعادة ظهور تطبيق Excel في حال كان مخفيًا.
وظيفة الكود:
TextBox6 و TextBox7: حساب حاصل ضرب القيم المدخلة وعرضها.
Label45: عرض مجموع القيم من العمود G.
ComboBox1: تعبئة قائمة بالبيانات من العمود A.
Label33: عرض التاريخ الحالي عند تحميل النموذج.
إخفاء النموذج: ضمان عدم إغلاق النموذج بالكامل وحفاظه على البيانات.
شرح كود VBA لتحرير البيانات والتبديل بين الصفحات في نموذج المستخدم
في هذا الشرح، سنتناول ثلاثة أكواد VBA تُستخدم في نموذج المستخدم (UserForm) في Excel. سنفصل كيفية تحديث البيانات في ورقة العمل وتنظيف عناصر الإدخال، بالإضافة إلى التبديل بين الصفحات في نموذج المستخدم.
تحديث البيانات في ورقة العمل
Private Sub CommandButton9_Click()
Dim ws As Worksheet
Dim currentRow As Long
Set ws = ThisWorkbook.Sheets(“ent”)
currentRow = CLng(Me.Tag)
‘ التأكد من أن رقم الصف الحالي صحيح
If currentRow >= 3 And currentRow <= ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Then
‘ تحديث البيانات في ورقة العمل
ws.Cells(currentRow, 1).Value = TextBox3.Value ‘ العمود A
ws.Cells(currentRow, 2).Value = TextBox4.Value ‘ العمود B
ws.Cells(currentRow, 3).Value = TextBox5.Value ‘ العمود C
ws.Cells(currentRow, 4).Value = TextBox6.Value ‘ العمود D
ws.Cells(currentRow, 5).Value = TextBox7.Value ‘ العمود E
ws.Cells(currentRow, 6).Value = Label42.Caption ‘ العمود F (بناءً على Label42)
ws.Cells(currentRow, 7).Value = TextBox9.Value ‘ العمود G
MsgBox “Nic Work Edit is DoOnN”
‘ مسح محتويات TextBox
TextBox3.Value = “”
TextBox4.Value = “”
TextBox5.Value = “”
TextBox6.Value = “”
TextBox7.Value = “”
TextBox9.Value = “”
‘ مسح الصف الحالي من خاصية UserForm
Me.Tag = “”
Else
MsgBox “الرقم غير موجود”
End If
End Sub
تحليل الكود
- تعريف المتغيرات: يتم تعريف متغير ws ككائن ورقة العمل، وcurrentRow كرقم الصف الحالي الذي سيتم تعديله.
- تعيين ورقة العمل: يتم تعيين ورقة العمل التي سيتم التعديل عليها إلى المتغير ws، والتي تُسمى “ent”.
- التحقق من صحة الصف: يتم التأكد من أن رقم الصف (currentRow) ضمن نطاق الصفوف الصالحة (من الصف 3 إلى آخر صف مستخدم).
- تحديث البيانات: يتم إدخال القيم من عناصر الإدخال (TextBox وLabel) إلى الأعمدة المناسبة في الصف المحدد.
- تنظيف عناصر الإدخال: بعد تحديث البيانات، يتم مسح محتويات عناصر الإدخال لإعداد النموذج لإدخال بيانات جديدة.
- مسح الخاصية: يتم مسح خاصية Tag من النموذج لتجنب التعديلات على الصفوف غير الصحيحة.
- إظهار رسالة تأكيد: تظهر رسالة تأكيد عند إتمام عملية التحديث بنجاح، أو رسالة خطأ إذا كان الصف غير موجود.
التبديل بين الصفحات في نموذج المستخدم
تستخدم الأزرار التالية لتبديل الصفحات في نموذج المستخدم:
Private Sub CommandButton2_Click()
MultiPage1.Value = 1 ‘page2 is indexed as 1
End Sub
Private Sub CommandButton3_Click()
MultiPage1.Value = 2 ‘page3 is indexed as 2
End Sub
Private Sub CommandButton4_Click()
MultiPage1.Value = 3 ‘page3 is indexed as 3
End Sub
تحليل الأزرار
- التبديل إلى الصفحة 2: عند الضغط على CommandButton2، يتم تعيين خاصية Value للعنصر MultiPage1 إلى 1، مما ينقل المستخدم إلى الصفحة الثانية.
- التبديل إلى الصفحة 3: عند الضغط على CommandButton3، يتم تعيين خاصية Value إلى 2، مما ينقل المستخدم إلى الصفحة الثالثة.
- التبديل إلى الصفحة 4: عند الضغط على CommandButton4، يتم تعيين خاصية Value إلى 3، مما ينقل المستخدم إلى الصفحة الرابعة.
ملخص
يعمل هذا الكود على إدارة البيانات في ورقة العمل من خلال تحديثها استنادًا إلى الإدخالات في نموذج المستخدم، ويقوم أيضًا بالتبديل بين الصفحات داخل النموذج بناءً على الأزرار التي يضغط عليها المستخدم. يساعد هذا في تنظيم البيانات وتسهيل التفاعل مع نموذج المستخدم.
شرح كود VBA لتحرير البيانات وتنقل الصفحات في نموذج المستخدم
تحديث البيانات في ورقة العمل
Private Sub CommandButton9_Click()
Dim ws As Worksheet
Dim currentRow As Long
Set ws = ThisWorkbook.Sheets(“ent”)
currentRow = CLng(Me.Tag)
‘ التأكد من أن رقم الصف الحالي صحيح
If currentRow >= 3 And currentRow <= ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Then
‘ تحديث البيانات في ورقة العمل
ws.Cells(currentRow, 1).Value = TextBox3.Value ‘ العمود A
ws.Cells(currentRow, 2).Value = TextBox4.Value ‘ العمود B
ws.Cells(currentRow, 3).Value = TextBox5.Value ‘ العمود C
ws.Cells(currentRow, 4).Value = TextBox6.Value ‘ العمود D
ws.Cells(currentRow, 5).Value = TextBox7.Value ‘ العمود E
ws.Cells(currentRow, 6).Value = Label42.Caption ‘ العمود F (بناءً على Label42)
ws.Cells(currentRow, 7).Value = TextBox9.Value ‘ العمود G
MsgBox “تم تحديث البيانات بنجاح”
‘ مسح محتويات TextBox
TextBox3.Value = “”
TextBox4.Value = “”
TextBox5.Value = “”
TextBox6.Value = “”
TextBox7.Value = “”
TextBox9.Value = “”
‘ مسح رقم الصف الحالي من خاصية UserForm
Me.Tag = “”
Else
MsgBox “رقم الصف غير موجود”
End If
End Sub
تحليل الكود
- تعريف المتغيرات: يتم تعريف متغير ws ككائن ورقة العمل، وcurrentRow كرقم الصف الذي سيتم تعديله.
- تعيين ورقة العمل: يتم تعيين ورقة العمل “ent” إلى المتغير ws.
- التحقق من صحة رقم الصف: يتم التأكد من أن currentRow يقع بين الصف 3 وآخر صف مستخدم في العمود A.
- تحديث البيانات: يتم إدخال القيم من عناصر الإدخال (مثل TextBox3, TextBox4, وغيرها) إلى الأعمدة المحددة في الصف الحالي.
- تنظيف عناصر الإدخال: بعد التحديث، يتم مسح محتويات جميع TextBox استعدادًا للبيانات الجديدة.
- مسح خاصية Tag: يتم مسح خاصية Tag من النموذج لضمان عدم تعديل الصفوف غير الصحيحة.
- رسالة التأكيد: تظهر رسالة تأكيد إذا تمت العملية بنجاح، أو رسالة خطأ إذا كان الصف غير موجود.
التبديل بين الصفحات في نموذج المستخدم
Private Sub CommandButton2_Click()
MultiPage1.Value = 1 ‘ الانتقال إلى الصفحة 2
End Sub
Private Sub CommandButton3_Click()
MultiPage1.Value = 2 ‘ الانتقال إلى الصفحة 3
End Sub
Private Sub CommandButton4_Click()
MultiPage1.Value = 3 ‘ الانتقال إلى الصفحة 4
End Sub
تحليل الأزرار
- التبديل إلى الصفحة 2: عند الضغط على CommandButton2، يتم تعيين خاصية Value للعنصر MultiPage1 إلى 1، مما ينقل المستخدم إلى الصفحة الثانية.
- التبديل إلى الصفحة 3: عند الضغط على CommandButton3، يتم تعيين خاصية Value إلى 2، مما ينقل المستخدم إلى الصفحة الثالثة.
- التبديل إلى الصفحة 4: عند الضغط على CommandButton4، يتم تعيين خاصية Value إلى 3، مما ينقل المستخدم إلى الصفحة الرابعة.
ملخص
يعمل الكود على تحديث البيانات في ورقة العمل “ent” بناءً على القيم المدخلة في نموذج المستخدم، مع ضمان أن الصف الحالي صحيح ويحتوي على بيانات. بالإضافة إلى ذلك، يوفر الكود الأزرار اللازمة للتبديل بين الصفحات المختلفة داخل النموذج، مما يسهم في تحسين تجربة المستخدم وتنظيم العمل داخل النموذج.
شرح كود VBA لإدارة البيانات في ListBox وتصديرها إلى PDF
1. تحميل البيانات إلى ListBox
Private Sub CommandButton21_Click()
‘ تعريف المتغيرات
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim c As Long
‘ تحديد الشيت “stc”
Set ws = ThisWorkbook.Sheets(“stc”)
‘ الحصول على آخر صف يحتوي على بيانات في العمود A
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
‘ مسح محتويات الـ ListBox1 قبل إضافة بيانات جديدة
Me.ListBox1.Clear
‘ إعداد الـ ListBox ليحتوي على 8 أعمدة (A إلى H)
Me.ListBox1.ColumnCount = 8
‘ قراءة البيانات من الأعمدة H إلى A بدءًا من الصف 2
For r = 2 To lastRow
‘ إضافة الصف كصف منفصل في ListBox1
Me.ListBox1.AddItem ws.Cells(r, 8).Value ‘ إضافة أول عمود (العمود H)
For c = 7 To 1 Step -1 ‘ إضافة الأعمدة من G إلى A بترتيب معكوس
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 8 – c) = ws.Cells(r, c).Value
Next c
Next r
End Sub
تحليل الكود
تعريف المتغيرات: يتم تعريف متغيرات ws ككائن ورقة العمل، lastRow للحصول على رقم آخر صف يحتوي على بيانات، وr وc كعدادات للحلقات.
تحديد ورقة العمل: يتم تعيين ورقة العمل “stc” إلى المتغير ws.
الحصول على آخر صف: يتم حساب رقم آخر صف يحتوي على بيانات في العمود A.
مسح محتويات ListBox: يتم مسح البيانات الحالية من ListBox1 لإعدادها لاستقبال بيانات جديدة.
إعداد ListBox: يتم ضبط ListBox1 ليحتوي على 8 أعمدة، بدءًا من A إلى H.
قراءة البيانات: يتم قراءة البيانات من الأعمدة H إلى A بدءًا من الصف 2، وإضافتها إلى ListBox1 بترتيب معكوس.
2. تصدير بيانات ListBox إلى ملف PDF
Private Sub CommandButton22_Click()
Dim fileDialog As fileDialog
Dim pdfFilePath As String
Dim ws As Worksheet
Dim listItem As Variant
Dim rowIndex As Long
Dim colIndex As Long
Dim i As Long
‘ إعداد مربع حوار اختيار مكان الحفظ
Set fileDialog = Application.fileDialog(msoFileDialogSaveAs)
fileDialog.Title = “حدد موقع حفظ ملف PDF”
‘ عرض مربع الحوار واختيار مكان الحفظ
If fileDialog.Show = -1 Then
pdfFilePath = fileDialog.SelectedItems(1) & “.pdf” ‘ إضافة امتداد PDF تلقائيًا
Else
Exit Sub ‘ إذا تم إلغاء العملية
End If
‘ إنشاء ورقة عمل مؤقتة لتخزين بيانات ListBox
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = “TempSheet”
‘ نسخ بيانات ListBox إلى الورقة المؤقتة
rowIndex = 1 ‘ بدء النسخ من الصف الأول
For i = 0 To ListBox1.ListCount – 1
For colIndex = 0 To ListBox1.ColumnCount – 1
ws.Cells(rowIndex, colIndex + 1).Value = ListBox1.List(i, colIndex)
Next colIndex
rowIndex = rowIndex + 1 ‘ الانتقال إلى الصف التالي
Next i
‘ تصدير الورقة المؤقتة إلى PDF
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath, Quality:=xlQualityStandard
‘ حذف الورقة المؤقتة
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
MsgBox “تم تصدير البيانات بنجاح إلى ” & pdfFilePath, vbInformation
End Sub
تحليل الكود
إعداد مربع الحوار: يتم إعداد مربع حوار لاختيار مكان حفظ ملف PDF.
اختيار مكان الحفظ: يعرض مربع الحوار للمستخدم لاختيار موقع واسم الملف، مع إضافة امتداد .pdf تلقائيًا.
إنشاء ورقة عمل مؤقتة: يتم إنشاء ورقة عمل جديدة مؤقتة لتخزين بيانات ListBox1.
نسخ البيانات: يتم نسخ بيانات ListBox1 إلى الورقة المؤقتة، بدءًا من الصف الأول.
تصدير الورقة إلى PDF: يتم تصدير الورقة المؤقتة إلى ملف PDF في الموقع الذي اختاره المستخدم.
حذف الورقة المؤقتة: بعد التصدير، يتم حذف الورقة المؤقتة لتجنب تكدس الملفات غير الضرورية.
رسالة التأكيد: تظهر رسالة تأكيد عند الانتهاء بنجاح.
3. مسح بيانات ListBox
Private Sub CommandButton24_Click()
‘ مسح كافة البيانات من ListBox1
Me.ListBox1.Clear
End Sub
تحليل الكود
- مسح البيانات: يتم مسح كافة البيانات من ListBox1 عند الضغط على CommandButton24.
ملخص
يمكّن هذا الكود المستخدم من تحميل البيانات من ورقة العمل إلى ListBox بترتيب معكوس، ثم تصدير البيانات إلى ملف PDF وحفظه في الموقع الذي يختاره المستخدم. كما يوفر الكود وظيفة لمسح بيانات ListBox عند الحاجة، مما يسهم في إدارة البيانات بفعالية وتحسين تجربة المستخدم داخل نموذج Excel.
هذا الكود يقوم بعملية معقدة تتضمن التعامل مع ورقتين من أوراق العمل في Excel: “fat” و “out”. يتم إدخال معلومات الفاتورة، التحقق من صحة المعلومات، نسخ بيانات من ورقة إلى أخرى، حساب إجمالي، وتصدير البيانات إلى ملف PDF. سأوضح تفاصيل هذا الكود وكيفية عمله:
شرح كود VBA لإدارة الفواتير وتصديرها إلى PDF
1. تعريف المتغيرات وتحديد الأوراق
Private Sub CommandButton20_Click()
Dim wsFat As Worksheet
Dim wsOut As Worksheet
Dim invoiceNumber As String
Dim invoiceDate As String
Dim clientName As String
Dim phoneNumber As String
Dim taxNumber As String
Dim lastRow As Long
Dim copyRow As Long
Dim pdfFilePath As Variant
‘ تحديد أوراق العمل “fat” و “out”
Set wsFat = ThisWorkbook.Worksheets(“fat”)
Set wsOut = ThisWorkbook.Worksheets(“out”)
تعريف المتغيرات: يتم تعريف المتغيرات لاستخدامها لاحقًا في الكود.
تحديد أوراق العمل: يتم تعيين ورقة العمل “fat” إلى المتغير wsFat وورقة العمل “out” إلى المتغير wsOut.
2. التحقق من صحة المدخلات
‘ التحقق من وجود قيم في TextBox10 و TextBox11
If TextBox10.Value = “” Or TextBox11.Value = “” Then
MsgBox “يرجى إدخال رقم الفاتورة وتاريخ الفاتورة.”
Exit Sub
End If
invoiceNumber = TextBox10.Value
invoiceDate = TextBox11.Value
‘ التحقق من عدم تكرار رقم الفاتورة أو التاريخ في ورقة “fat”
If wsFat.Range(“B1”).Value = invoiceNumber Or wsFat.Range(“B2”).Value = invoiceDate Then
MsgBox “هذه الفاتورة أو التاريخ موجود بالفعل في ورقة ‘fat’.”
Exit Sub
End If
التحقق من صحة المدخلات: يتم التأكد من أن المستخدم قد أدخل رقم الفاتورة وتاريخ الفاتورة.
التحقق من التكرار: يتم التحقق من أن رقم الفاتورة وتاريخ الفاتورة غير موجودين بالفعل في ورقة “fat” لتجنب التكرار.
إدخال بيانات العميل
‘ إدخال بيانات العميل عبر InputBox
clientName = InputBox(“Name:”)
phoneNumber = InputBox(“Phone:”)
taxNumber = InputBox(“Tax:”)
‘ التحقق من عدم وجود قيم فارغة
If clientName = “” Or phoneNumber = “” Or taxNumber = “” Then
MsgBox “يرجى إدخال جميع بيانات العميل.”
Exit Sub
End If
‘ إدخال بيانات العميل إلى ورقة “fat”
wsFat.Range(“B3”).Value = clientName
wsFat.Range(“B4”).Value = phoneNumber
wsFat.Range(“B5”).Value = taxNumber
إدخال بيانات العميل: يتم إدخال اسم العميل ورقم الهاتف ورقم الضريبة باستخدام InputBox.
التحقق من القيم الفارغة: يتم التأكد من أن جميع الحقول قد تم ملؤها.
نسخ البيانات من ورقة “out” إلى ورقة “fat”
‘ نسخ البيانات من ورقة “out” إلى ورقة “fat”
lastRow = wsOut.Cells(wsOut.Rows.Count, “A”).End(xlUp).Row
copyRow = 8
For i = 1 To lastRow
If wsOut.Cells(i, “A”).Value = invoiceNumber Then
wsFat.Cells(copyRow, “A”).Value = wsOut.Cells(i, “C”).Value
wsFat.Cells(copyRow, “B”).Value = wsOut.Cells(i, “D”).Value
wsFat.Cells(copyRow, “C”).Value = wsOut.Cells(i, “E”).Value
wsFat.Cells(copyRow, “D”).Value = wsOut.Cells(i, “F”).Value
copyRow = copyRow + 1
End If
Next i
نسخ البيانات: يتم نسخ البيانات من ورقة “out” إلى ورقة “fat” إذا كان رقم الفاتورة يتطابق.
5. حساب الإجمالي وتصدير البيانات إلى PDF
‘ حساب إجمالي القيم في النطاق D8:D35
wsFat.Range(“D35”).Value = Application.WorksheetFunction.Sum(wsFat.Range(“D8:D35”))
‘ تصدير ورقة “fat” إلى ملف PDF
pdfFilePath = Application.GetSaveAsFilename(FileFilter:=”PDF Files (*.pdf), *.pdf”)
If pdfFilePath <> False Then
wsFat.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath
End If
حساب الإجمالي: يتم حساب إجمالي القيم في النطاق D8:D35 وإدخاله في الخلية D35.
تصدير PDF: يتم فتح مربع حوار لحفظ الملف ليقوم المستخدم بتحديد مكان حفظ ملف PDF، ثم يتم تصدير ورقة العمل إلى PDF.
6. تنظيف ورقة العمل
‘ مسح البيانات في ورقة “fat”
wsFat.Range(“B1:B2”).ClearContents
wsFat.Range(“A8:D” & wsFat.Cells(wsFat.Rows.Count, “A”).End(xlUp).Row).ClearContents
wsFat.Range(“D35”).ClearContents
End Sub
تنظيف البيانات: بعد تصدير البيانات إلى PDF، يتم مسح البيانات في الخلايا B1:B2، A8:D، وD35 في ورقة العمل “fat”.
شرح كود VBA لتحديث ورقة العمل “Jard”
1. تعريف المتغيرات وتحديد الورقة
Private Sub CommandButton19_Click()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Jard”)
Dim firstEmptyRow As Long
Dim matchFound As Boolean
Dim lastRow As Long
Dim i As Long
تحديد الورقة: يتم تعيين الورقة “Jard” إلى المتغير ws.
تعريف المتغيرات: يتم تعريف المتغيرات المستخدمة لاحقًا في الكود.
2. العثور على أول صف فارغ في العمود B
‘ العثور على أول صف فارغ في العمود B
firstEmptyRow = ws.Cells(ws.Rows.Count, “B”).End(xlUp).Row + 1
البحث عن أول صف فارغ: يتم العثور على أول صف فارغ في العمود B باستخدام End(xlUp) ثم إضافة 1 للانتقال إلى الصف الفارغ التالي.
3. التحقق من تطابق التواريخ
‘ التحقق من تطابق التواريخ
matchFound = False
lastRow = ws.Cells(ws.Rows.Count, “B”).End(xlUp).Row
For i = 3 To lastRow
If ws.Cells(i, 3).Value = Me.TextBox21.Value And ws.Cells(i, 4).Value = Me.TextBox26.Value Then
matchFound = True
Exit For
End If
Next i
التحقق من التواريخ: يتم التحقق من تطابق القيم الموجودة في TextBox21 وTextBox26 مع القيم في العمودين C و D في ورقة العمل “Jard”. إذا تم العثور على تطابق، يتم تعيين matchFound إلى True.
4. ترحيل البيانات إلى الورقة بناءً على التحقق
‘ إذا لم يتم العثور على تطابق، ترحيل البيانات إلى أول صف فارغ
If Not matchFound Then
ws.Cells(firstEmptyRow, 2).Value = Me.TextBox16.Value
ws.Cells(firstEmptyRow, 3).Value = Me.TextBox17.Value
ws.Cells(firstEmptyRow, 4).Value = Me.Label33.Caption
ws.Cells(firstEmptyRow, 5).Value = Me.ComboBox1.Value
ws.Cells(firstEmptyRow, 6).Value = Me.Label47.Caption
ws.Cells(firstEmptyRow, 7).Value = Me.TextBox21.Value
ws.Cells(firstEmptyRow, 8).Value = Me.TextBox26.Value
ws.Cells(firstEmptyRow, 9).Value = Me.TextBox23.Value
ws.Cells(firstEmptyRow, 10).Value = Me.Label48.Caption
ws.Cells(firstEmptyRow, 11).Value = Me.Label49.Caption
ws.Cells(firstEmptyRow, 12).Value = Me.TextBox24.Value
Else
‘ إذا كان هناك تطابق، ترحيل فقط البيانات الجديدة التي تلي التواريخ المطابقة
ws.Cells(firstEmptyRow, 2).Value = Me.TextBox16.Value
ws.Cells(firstEmptyRow, 3).Value = Me.TextBox17.Value
ws.Cells(firstEmptyRow, 4).Value = Me.Label33.Caption
ws.Cells(firstEmptyRow, 5).Value = Me.ComboBox1.Value
ws.Cells(firstEmptyRow, 6).Value = Me.Label47.Caption
ws.Cells(firstEmptyRow, 7).Value = Me.TextBox23.Value
ws.Cells(firstEmptyRow, 8).Value = Me.Label48.Caption
ws.Cells(firstEmptyRow, 9).Value = Me.Label49.Caption
ws.Cells(firstEmptyRow, 10).Value = Me.TextBox24.Value
End If
إضافة بيانات جديدة: إذا لم يتم العثور على تطابق (matchFound هو False)، يتم إدخال البيانات من النموذج في الصف الفارغ الأول في الورقة.
تحديث البيانات الموجودة: إذا تم العثور على تطابق (matchFound هو True)، يتم تحديث البيانات في الصف الفارغ الأول مع البيانات الجديدة ولكن مع الاحتفاظ بالقيم الموجودة في التواريخ.
5. مسح البيانات من النموذج
‘ مسح البيانات من العناصر
Me.TextBox16.Value = “”
Me.TextBox17.Value = “”
Me.Label33.Caption = “”
Me.ComboBox1.Value = “”
Me.Label47.Caption = “”
Me.TextBox21.Value = “”
Me.TextBox26.Value = “”
Me.TextBox23.Value = “”
Me.Label48.Caption = “”
Me.Label49.Caption = “”
Me.TextBox24.Value = “”
End Sub
مسح البيانات: بعد ترحيل البيانات، يتم مسح جميع الحقول في النموذج لإعدادها للإدخالات المستقبلية.
شرح كود VBA كود حذف صفوف بناءً على رقم الفاتورة
Private Sub CommandButton17_Click()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
‘ تعيين ورقة العمل “out”
Set ws = ThisWorkbook.Sheets(“out”)
‘ الحصول على قيمة البحث من TextBox10
searchValue = TextBox10.Value
‘ التحقق من أن قيمة البحث ليست فارغة
If searchValue = “” Then
MsgBox “يرجى إدخال رقم الفاتورة”, vbExclamation
Exit Sub
End If
‘ البحث في العمود A عن القيمة المدخلة
Set foundCell = ws.Range(“A:A”).Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
‘ إذا تم العثور على الخلية، احذف الصف بأكمله
If Not foundCell Is Nothing Then
‘ حذف الصف
foundCell.EntireRow.Delete
‘ إظهار رسالة تأكيد الحذف
MsgBox “تم الحذف بنجاح!”, vbInformation
Else
‘ إذا لم يتم العثور على القيمة، أظهر رسالة تنبيه
MsgBox “رقم الفاتورة غير موجود”, vbExclamation
End If
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “out” إلى المتغير ws.
الحصول على رقم الفاتورة: يتم الحصول على القيمة المدخلة في TextBox10.
التحقق من القيمة: إذا كانت القيمة فارغة، يعرض رسالة تنبيه.
البحث عن القيمة: يتم البحث عن القيمة في العمود A.
حذف الصف: إذا تم العثور على القيمة، يتم حذف الصف الكامل.
رسائل التحقق: تعرض رسائل مختلفة بناءً على ما إذا تم العثور على القيمة أم لا.
كود استرجاع بيانات بناءً على رقم الفاتورة
Private Sub CommandButton18_Click()
Dim ws As Worksheet
Dim rng As Range
Dim foundItem As Range
Dim invoiceNumber As String
‘ تعيين ورقة العمل “out”
Set ws = ThisWorkbook.Sheets(“out”)
‘ الحصول على رقم الفاتورة من TextBox10
invoiceNumber = TextBox10.Text
‘ البحث عن رقم الفاتورة في العمود A
Set rng = ws.Range(“A:A”)
Set foundItem = rng.Find(What:=invoiceNumber, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundItem Is Nothing Then
‘ استرجاع البيانات بناءً على رقم الفاتورة
TextBox11.Text = ws.Cells(foundItem.Row, 2).Value ‘ التاريخ
TextBox12.Text = ws.Cells(foundItem.Row, 3).Value ‘ الصنف
TextBox13.Text = ws.Cells(foundItem.Row, 4).Value ‘ الكمية
Label43.Caption = ws.Cells(foundItem.Row, 5).Value ‘ سعر البيع
Label44.Caption = ws.Cells(foundItem.Row, 6).Value ‘ الإجمالي
Else
MsgBox “رقم الفاتورة غير موجود”, vbExclamation
End If
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “out” إلى المتغير ws.
الحصول على رقم الفاتورة: يتم الحصول على القيمة المدخلة في TextBox10.
البحث عن رقم الفاتورة: يتم البحث في العمود A عن رقم الفاتورة.
استرجاع البيانات: إذا تم العثور على رقم الفاتورة، يتم ملء الحقول الأخرى بناءً على البيانات الموجودة في الصف المطابق.
رسائل التحقق: تعرض رسالة إذا لم يتم العثور على رقم الفاتورة.
كود تحديث البيانات بناءً على رقم الفاتورة
Private Sub CommandButton15_Click()
Dim ws As Worksheet
Dim invoiceNumber As String
Dim salePrice As Double
Dim quantity As Double
Dim total As Double
Dim selectedRow As Long
‘ تعيين ورقة العمل “out”
Set ws = ThisWorkbook.Sheets(“out”)
‘ الحصول على رقم الفاتورة من TextBox10
invoiceNumber = TextBox10.Text
‘ تحديد الصف بناءً على قيمة SpinButton2
selectedRow = SpinButton2.Value + 3 ‘ تعويض الصف ببدء البيانات من الصف 3
‘ التحقق من أن الصف المحدد ضمن النطاق الصحيح
If selectedRow < 3 Or selectedRow > ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row Then
MsgBox “The selected row is out of range.”, vbExclamation
Exit Sub
End If
‘ التحقق من أن رقم الفاتورة في الصف المحدد هو الرقم الذي تم إدخاله
If ws.Cells(selectedRow, 1).Value = invoiceNumber Then
‘ التحقق من صحة المدخلات
If IsNumeric(TextBox13.Text) And IsNumeric(Label43.Caption) Then
quantity = CDbl(TextBox13.Text)
salePrice = CDbl(Label43.Caption)
total = salePrice * quantity
‘ تحديث البيانات في ورقة العمل
ws.Cells(selectedRow, 3).Value = TextBox12.Text ‘ تحديث الصنف
ws.Cells(selectedRow, 4).Value = TextBox13.Text ‘ تحديث الكمية
ws.Cells(selectedRow, 5).Value = salePrice ‘ تحديث سعر البيع
ws.Cells(selectedRow, 6).Value = total ‘ تحديث الإجمالي
Label44.Caption = total ‘ تحديث Label44
MsgBox “Update is Done. Nice Work”, vbInformation
‘ مسح البيانات من TextBox و Label
TextBox10.Text = “”
TextBox11.Text = “”
TextBox12.Text = “”
TextBox13.Text = “”
Label43.Caption = “”
Label44.Caption = “”
Else
MsgBox “Please insert correct numbers”, vbExclamation
End If
Else
MsgBox “Invoice number does not match the selected row.”, vbExclamation
End If
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “out” إلى المتغير ws.
الحصول على رقم الفاتورة: يتم الحصول على القيمة من TextBox10.
تحديد الصف: يتم تحديد الصف بناءً على قيمة SpinButton2، مع تعويض الصف ببدء البيانات من الصف 3.
التحقق من النطاق: يتأكد من أن الصف المحدد ضمن النطاق الصحيح.
التحقق من رقم الفاتورة: إذا كان رقم الفاتورة في الصف المحدد هو الرقم الذي تم إدخاله، يتم التحقق من صحة المدخلات.
تحديث البيانات: يتم تحديث بيانات الصنف، الكمية، سعر البيع، والإجمالي في ورقة العمل.
مسح البيانات: بعد التحديث، يتم مسح البيانات من TextBox وLabel.
رسائل التحقق: تعرض رسائل مختلفة بناءً على حالة الإدخال والتحديث.
كود حذف الصفوف بناءً على رقم الفاتورة
Private Sub CommandButton16_Click()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
Dim lastRow As Long
Dim i As Long
‘ تحديد ورقة العمل “out”
Set ws = ThisWorkbook.Sheets(“out”)
‘ تحديد قيمة TextBox10 (رقم الفاتورة)
searchValue = TextBox10.Value
‘ التأكد من أن TextBox10 يحتوي على قيمة
If searchValue = “” Then
MsgBox “Plz insert Number”, vbExclamation
Exit Sub
End If
‘ العثور على آخر صف يحتوي على بيانات
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
‘ حلقة للتنقل بين الصفوف من الصف الأخير إلى الصف الأول
For i = lastRow To 3 Step -1
If ws.Cells(i, 1).Value = searchValue Then
ws.Rows(i).Delete
End If
Next i
‘ رسالة تأكيد الحذف
MsgBox “Delete is Done”, vbInformation
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “out” إلى المتغير ws.
الحصول على رقم الفاتورة: يتم الحصول على القيمة من TextBox10.
التحقق من القيمة: إذا كانت TextBox10 فارغة، تعرض رسالة تنبيه.
البحث والحذف: يتم البحث عن رقم الفاتورة في العمود A وحذف جميع الصفوف التي تحتوي على الرقم.
رسالة تأكيد الحذف: تعرض رسالة عند الانتهاء من حذف الصفوف.
كود حذف صف بناءً على القيمة المدخلة في TextBox3
Private Sub CommandButton12_Click()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
‘ تعيين ورقة العمل “ent”
Set ws = ThisWorkbook.Sheets(“ent”)
‘ الحصول على القيمة من TextBox3
searchValue = TextBox3.Value
‘ التحقق من أن TextBox3 يحتوي على قيمة
If searchValue = “” Then
MsgBox “Please insert a value to search”, vbExclamation
Exit Sub
End If
‘ البحث عن القيمة في العمود A
Set foundCell = ws.Range(“A:A”).Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
‘ إذا تم العثور على القيمة
If Not foundCell Is Nothing Then
‘ حذف الصف الذي يحتوي على القيمة
foundCell.EntireRow.Delete
‘ رسالة تأكيد الحذف
MsgBox “Delete is Done!”, vbInformation
Else
‘ إذا لم يتم العثور على القيمة
MsgBox “Number Not Found”, vbExclamation
End If
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “ent” إلى المتغير ws.
الحصول على القيمة: يتم الحصول على القيمة من TextBox3.
التحقق من القيمة: إذا كانت TextBox3 فارغة، تعرض رسالة تنبيه.
البحث والحذف: يتم البحث عن القيمة في العمود A وحذف الصف الذي يحتوي على القيمة.
رسائل التحقق: تعرض رسائل مختلفة بناءً على حالة البحث والحذف.
كود البحث واسترجاع البيانات بناءً على القيمة المدخلة في TextBox3
Private Sub CommandButton13_Click()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
‘ تعيين ورقة العمل “ent”
Set ws = ThisWorkbook.Sheets(“ent”)
‘ الحصول على القيمة من TextBox3
searchValue = TextBox3.Value
‘ البحث عن القيمة في العمود A
Set foundCell = ws.Range(“A:A”).Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not foundCell Is Nothing Then
‘ ملء TextBox بناءً على بيانات الصف الذي تم العثور عليه
TextBox3.Value = ws.Cells(foundCell.Row, 1).Value ‘ قيمة A
TextBox4.Value = ws.Cells(foundCell.Row, 2).Value ‘ قيمة B
TextBox5.Value = ws.Cells(foundCell.Row, 3).Value ‘ قيمة C
TextBox6.Value = ws.Cells(foundCell.Row, 4).Value ‘ قيمة D
TextBox7.Value = ws.Cells(foundCell.Row, 5).Value ‘ قيمة E
TextBox9.Value = ws.Cells(foundCell.Row, 7).Value ‘ قيمة G
‘ تخزين رقم الصف في خاصية Tag
Me.Tag = foundCell.Row
Else
MsgBox “Item Not Found”, vbExclamation
End If
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “ent” إلى المتغير ws.
الحصول على القيمة: يتم الحصول على القيمة من TextBox3.
البحث واسترجاع البيانات: يتم البحث عن القيمة في العمود A واسترجاع بيانات الصف الذي يحتوي على القيمة، ثم تعبئة TextBox بالقيم.
تخزين رقم الصف: يتم تخزين رقم الصف في خاصية Tag لـ UserForm.
كود حفظ البيانات في ورقة العمل “out”
Private Sub CommandButton14_Click()
Dim ws As Worksheet
Dim nextRow As Long
‘ تعيين ورقة العمل “out”
Set ws = ThisWorkbook.Sheets(“out”)
‘ العثور على الصف التالي الفارغ
nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
If nextRow < 3 Then nextRow = 3
‘ إدخال البيانات في الصف التالي الفارغ
ws.Cells(nextRow, 1).Value = TextBox10.Text ‘ رقم الفاتورة
ws.Cells(nextRow, 2).Value = TextBox11.Text ‘ التاريخ
ws.Cells(nextRow, 3).Value = TextBox12.Text ‘ الصنف
ws.Cells(nextRow, 4).Value = TextBox13.Text ‘ الكمية
ws.Cells(nextRow, 5).Value = Label43.Caption ‘ سعر البيع
ws.Cells(nextRow, 6).Value = Label44.Caption ‘ الإجمالي
‘ مسح البيانات من TextBox و Label
TextBox10.Text = “”
TextBox11.Text = “”
TextBox12.Text = “”
TextBox13.Text = “”
Label43.Caption = “”
Label44.Caption = “”
‘ رسالة تأكيد الحفظ
MsgBox “Good data is Saved”, vbInformation
End Sub
تحديد ورقة العمل: يتم تعيين ورقة العمل “out” إلى المتغير ws.
البحث عن الصف الفارغ: يتم تحديد الصف التالي الفارغ في ورقة العمل.
إدخال البيانات: يتم إدخال البيانات من TextBox وLabel إلى الصف الفارغ.
مسح البيانات: بعد الإدخال، يتم مسح البيانات من TextBox وLabel.
رسالة تأكيد الحفظ: تعرض رسالة عند الانتهاء من حفظ البيانات.
كود ComboBox1_Change
Private Sub ComboBox1_Change()
‘ تعيين ورقتي العمل
Dim wsStc As Worksheet
Dim wsEnt As Worksheet
Set wsStc = ThisWorkbook.Sheets(“stc”)
Set wsEnt = ThisWorkbook.Sheets(“ent”)
‘ الحصول على قيمة الصنف من ComboBox1
Dim searchValue As String
searchValue = ComboBox1.Value
‘ البحث في ورقة العمل “stc”
Dim searchRangeStc As Range
Set searchRangeStc = wsStc.Range(“A3:A” & wsStc.Cells(wsStc.Rows.Count, “A”).End(xlUp).Row)
Dim resultRangeStc As Range
Set resultRangeStc = searchRangeStc.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
‘ التحقق مما إذا تم العثور على تطابق في ورقة العمل “stc”
If Not resultRangeStc Is Nothing Then
‘ عرض الرقم في Label47 من العمود B
Label47.Caption = wsStc.Cells(resultRangeStc.Row, “B”).Value
Else
‘ في حالة عدم العثور على تطابق، مسح Label47
Label47.Caption = “”
End If
‘ البحث في ورقة العمل “ent”
Dim searchRangeEnt As Range
Set searchRangeEnt = wsEnt.Range(“C3:C” & wsEnt.Cells(wsEnt.Rows.Count, “C”).End(xlUp).Row)
Dim resultRangeEnt As Range
Set resultRangeEnt = searchRangeEnt.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
‘ التحقق مما إذا تم العثور على تطابق في ورقة العمل “ent”
If Not resultRangeEnt Is Nothing Then
‘ عرض الرقم في Label49 من العمود E
Label49.Caption = wsEnt.Cells(resultRangeEnt.Row, “E”).Value
Else
‘ في حالة عدم العثور على تطابق، مسح Label49
Label49.Caption = “”
End If
End Sub
تعيين ورقتي العمل: يتم تعيين الورقتين “stc” و”ent” إلى المتغيرين wsStc و wsEnt على التوالي.
الحصول على قيمة ComboBox: يتم الحصول على القيمة المحددة في ComboBox1.
البحث في “stc”:
يتم البحث عن القيمة في العمود A.
إذا تم العثور على القيمة، يتم عرض القيمة المقابلة من العمود B في Label47.
إذا لم يتم العثور على القيمة، يتم مسح محتوى Label47.
البحث في “ent”:
يتم البحث عن القيمة في العمود C.
إذا تم العثور على القيمة، يتم عرض القيمة المقابلة من العمود E في Label49.
إذا لم يتم العثور على القيمة، يتم مسح محتوى Label49.
كود CommandButton1_Click
Private Sub CommandButton1_Click()
MultiPage1.Value = 0 ‘ الانتقال إلى الصفحة الأولى في MultiPage
End Sub
الانتقال إلى الصفحة الأولى: يقوم هذا الكود بتعيين قيمة MultiPage1.Value إلى 0، مما يعني الانتقال إلى الصفحة الأولى في عنصر التحكم MultiPage1.
كود CommandButton11_Click
Private Sub CommandButton11_Click()
Dim ws As Worksheet
Dim searchValue As String
Dim foundCell As Range
Dim lastRow As Long
Dim i As Long
‘ تحديد ورقة العمل “ent”
Set ws = ThisWorkbook.Sheets(“ent”)
‘ تحديد قيمة TextBox3 (رقم الفاتورة)
searchValue = TextBox3.Value
‘ التأكد من أن TextBox3 يحتوي على قيمة
If searchValue = “” Then
MsgBox “الرجاء إدخال رقم الفاتورة”, vbExclamation
Exit Sub
End If
‘ العثور على آخر صف يحتوي على بيانات
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
‘ حلقة للتنقل بين الصفوف من الصف الأخير إلى الصف الأول
For i = lastRow To 3 Step -1
If ws.Cells(i, 1).Value = searchValue Then
ws.Rows(i).Delete
End If
Next i
‘ رسالة تأكيد الحذف
MsgBox “Delete is Done”, vbInformation
End Sub
تعيين ورقة العمل: يتم تعيين الورقة “ent” إلى المتغير ws.
الحصول على رقم الفاتورة: يتم الحصول على القيمة من TextBox3.
التحقق من وجود قيمة: إذا كانت TextBox3 فارغة، تعرض رسالة تنبيه.
العثور على آخر صف: يتم العثور على آخر صف يحتوي على بيانات في العمود A.
حلقة الحذف: يتم التنقل بين الصفوف من الأسفل إلى الأعلى، وحذف الصفوف التي تحتوي على القيمة المحددة.
رسالة تأكيد الحذف: تعرض رسالة تأكيد عند الانتهاء من الحذف.