مقدمة
في هذا المقال، سنتناول شرحًا تفصيليًا لكود VBA المخصص لإنشاء بوليصات شحن تلقائيًا في Excel. يهدف هذا النظام إلى أتمتة عملية توليد أرقام البوليصات، وإنشاء صفحات مستقلة لكل بوليصة بناءً على قالب جاهز، مع إدخال البيانات المطلوبة بكل سهولة.
إذا لم تشاهد الجزء الأول من الشرح، يمكنك متابعته من هنا:
شرح الكود بالكامل
أولًا: توليد رقم بوليصة جديد عند فتح الفورم
UserForm_Initialize()
Dim ws As Worksheet
Dim newPolicyNumber As String
Dim maxPolicyNumber As Long
Dim sheetName As String
maxPolicyNumber = 5000 ‘ بدء الرقم من EG5001
‘ البحث عن آخر رقم بوليصة في أوراق العمل
For Each ws In ThisWorkbook.Sheets
sheetName = ws.Name
If sheetName Like “EG5*” Then
If IsNumeric(Mid(sheetName, 3)) Then
If CLng(Mid(sheetName, 3)) > maxPolicyNumber Then
maxPolicyNumber = CLng(Mid(sheetName, 3))
End If
End If
End If
Next ws
newPolicyNumber = “EG” & maxPolicyNumber + 1
Label14.Caption = newPolicyNumber
💡 كيف يعمل هذا الجزء؟
عند تشغيل الـ UserForm، يتم البحث عن آخر رقم بوليصة موجود في أوراق العمل.
يبدأ البحث من الرقم 5000 بحيث تكون أول بوليصة EG5001.
يتم البحث داخل كل ورقة في الملف لمعرفة أكبر رقم مستخدم، ومن ثم توليد الرقم الجديد.
أخيرًا، يتم عرض الرقم الجديد في Label14 ليكون جاهزًا للاستخدام.
ثانيًا: إنشاء بوليصة جديدة عند الضغط على الزر
CommandButton1_Click()
Dim ws As Worksheet, newWs As Worksheet
Dim newPolicyNumber As String
Set ws = ThisWorkbook.Sheets(“pro”)
newPolicyNumber = Label14.Caption
‘ إنشاء ورقة جديدة بنفس رقم البوليصة بناءً على ورقة “pro“
Application.ScreenUpdating = False
ws.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set newWs = ActiveSheet
newWs.Name = newPolicyNumber
‘ ترحيل البيانات
With newWs
Range(“B3”).Value = newPolicyNumber
Range(“E3”).Value = TextBox1.Value
Range(“B5”).Value = TextBox2.Value
Range(“B7”).Value = TextBox3.Value
Range(“B9”).Value = TextBox4.Value
Range(“B14”).Value = TextBox5.Value
Range(“E14”).Value = TextBox6.Value
Range(“B16”).Value = TextBox7.Value
Range(“E16”).Value = “رقم التتبع هنا” ‘ أدخل رقم التتبع إن وجد
Range(“B18”).Value = TextBox8.Value
Range(“E18”).Value = “قيد الشحن” ‘ الحالة الافتراضية
Range(“B23”).Value = TextBox9.Value
Range(“E23”).Value = TextBox10.Value
Range(“B26”).Value = TextBox11.Value
End With
‘ تحديث رقم البوليصة للطلب الجديد
Label14.Caption = “EG” & CLng(Mid(newPolicyNumber, 3)) + 1
‘ مسح الحقول
TextBox1.Value = “”
TextBox2.Value = “”
TextBox3.Value = “”
TextBox4.Value = “”
TextBox5.Value = “”
TextBox6.Value = “”
TextBox7.Value = “”
TextBox8.Value = “”
TextBox9.Value = “”
TextBox10.Value = “”
TextBox11.Value = “”
MsgBox “تم إنشاء بوليصة الشحن بنجاح!”, vbInformation
Application.ScreenUpdating = True
💡 كيف يعمل هذا الجزء؟
نسخ قالب البوليصة:
يتم نسخ ورقة العمل “pro” لإنشاء ورقة جديدة بنفس التنسيق.
يتم تسمية الورقة الجديدة بنفس رقم البوليصة المعروض في Label14.
إدخال بيانات العميل:
يأخذ البيانات المدخلة في الـ TextBoxات ويضعها في أماكنها المخصصة داخل الورقة.
يقوم بتحديد “قيد الشحن” كحالة افتراضية، ويمكن تعديلها لاحقًا.
تحديث الرقم ومسح البيانات:
بعد تسجيل البيانات، يتم توليد رقم البوليصة التالية وعرضه في Label14.
يتم مسح جميع الحقول لإدخال بيانات جديدة.
إظهار رسالة تأكيد:
يتم عرض رسالة نجاح للمستخدم، تؤكد اكتمال العملية بنجاح.
🎯 أهم مميزات الكود:
تلقائية كاملة:لا حاجة لإدخال أرقام البوليصات يدويًا، فهي تُولد تلقائيًا.
سهولة الاستخدام: بضغطة زر يتم إنشاء البوليصة وترحيل البيانات تلقائيًا.
تخزين دقيق: كل بوليصة تحصل على ورقة مستقلة، مما يسهل تنظيم البيانات والبحث عنها لاحقًا.
تحسين تجربة المستخدم: يتم مسح الحقول تلقائيًا بعد كل إدخال جديد.
🚀 أفكار لتطوير البرنامج مستقبلًا:
إضافة زر طباعة: لطباعة البوليصة مباشرة بعد إنشائها.
إدخال قائمة من العملاء: بحيث يمكن اختيار العميل بدلاً من إدخال بياناته يدويًا.
إضافة إمكانية التصدير إلى PDF: لحفظ نسخة إلكترونية من كل بوليصة.
إرسال إشعار عبر البريد الإلكتروني: بإمكانك إرسال تأكيد للشحن إلى العميل مباشرة.
🎬 تابع الشرح بالفيديو
إذا كنت تفضل مشاهدة الشرح العملي، يمكنك متابعة الفيديو من هنا: