العمليات الحسابية
سوف نتعرف على كيفية العمليات الحسابية وكذلك التفقيط من خلال يوزرفورم & Userform
اجراء العمليات الحسابية داخل اليوزرفورم هى عملية حسابية عادية جدا ليس فيها أى صعوبة
ولكنها تعتمد على الأمر الذى تقوم بكتابته بشكل برمجى والحدث
وسوف نتطرق الى طريقتين
لنلق نظرة أولا على شكل اليوزر فورم ثم نتطرق الى التصميم وبعدها الى الأكواد البرمجية المستخدمة
الشفرات المستخدمة داخل اليوزرفورم 1 والذى تظهر فيه العمليات الحسابية بناء على حدث click اى بالضغط على الزر الخاص بإظهار النتائج (( نلاحظ بأن بيوزرفورم1 به عدد 2 زر CommandButton احدهما لهذا الأمر والآخر لإغلاق اليوزرفورم ))
نلاحظ التالي :
عملية الضرب نقوم بكتابة الـ TextBox الذى ستظهر به النتيجة فى أول السطر يليه علامة الـ (.) ثم كلمة Value
أما الشفرة البرمجية الخاصة باليوزرفورم2
وهى الخاصة بإظهار النتائج بمجرد مرور الماوس على اليوزرفورم فقط بدون الضغط على أى زر لإظهار النتائج فهى كالتالي
الاختلاف ما بين اليوزرفورم 1 و 2
ان الثاني لم نستخدم زر امر لإظهار النتائج بل استخدمنا الامر UserForm_MouseMove
سوف نتعرف على كيفية العمليات الحسابية وكذلك التفقيط من خلال يوزرفورم & Userform
اجراء العمليات الحسابية داخل اليوزرفورم هى عملية حسابية عادية جدا ليس فيها أى صعوبة
ولكنها تعتمد على الأمر الذى تقوم بكتابته بشكل برمجى والحدث
وسوف نتطرق الى طريقتين
- اجراء العمليات الحسابية من خلال أوامر برمجيه داخل زر CommandButton
- من خلال مرور الماوس على اليوزرفورم
لنلق نظرة أولا على شكل اليوزر فورم ثم نتطرق الى التصميم وبعدها الى الأكواد البرمجية المستخدمة
الخطوات الأولي
- اضغط على Alt + F11 للدخول الى محرر الأكواد
- اضغط كليك يمين على يسار المحرر داخل نافذة Project-VBAProject
- اختر من القائمة التى تظهر Insert
- اختر منها Userform
- كرر الخطوات السابقة مرتين لإنشاء عدد 2 يوزرفورم
الخطوات الثانية مكونات كل يوزرفورم لكى يتم اضافتها لكل منهما
- نضغط بالماوس على يوزرفورم 1
- ثم نضغط على أيقونة Toolbox من شريط القوائم أعلى نافذة المحرر
- ثم نختار منها مكونات كل يوزرفورم كما سيلي
- كذلك الحال بالنسبة لليوزرفورم رقم 2
مكونات اليوزرفورم 1
- عدد 10 Label
- عدد 16 TextBox
- عدد 2 CommandButton
مكونات اليوزرفورم 2
- عدد 10 Label
- عدد 16 TextBox
- عدد 1 CommandButton
بالطبع يمكنك اعادة تسمية أيا من مكونات اليوزرفورم من خلال خصائص كل منهم
الخطوات الثالثة الشفرات أو الأكواد البرمجية
هنا نتحدث عن تفقيط الناتج الإجمالى من العمليات الحسابية ، أو ايا كان الذى ستستخدمه كتفقيط لأى ناتج
لذا يلزم إضافة موديول Module خاص بالشفرة البرمجية التى تحول الرقم الى كتابة نطلق عليه التفقيط
وهى دالة مخصصة لتحويل الرقم الى كتابة مع اضافة كلمة فقط لاغير داخل الدالة
قم بالضغط كليك يمين على يسار نافذة المحرر داخل نافذة الخصائص
اختر Insert ثم اختر Module
اضغط مرتين على Module لفتحه
اضف الشفرة (الدالة ) البرمجية الخاصة بالتفقيط
دالة التفقيط
'https://elshriefacademy.blogspot.com
Function NoToTxt(TheNo As Double, MyCur As String, MySubCur As String) As String
Dim MyArry1(0 To 9) As String
Dim MyArry2(0 To 9) As String
Dim MyArry3(0 To 9) As String
Dim Myno As String
Dim GetNo As String
Dim RdNo As String
Dim My100 As String
Dim My10 As String
Dim My1 As String
Dim My11 As String
Dim My12 As String
Dim GetTxt As String
Dim Mybillion As String
Dim MyMillion As String
Dim MyThou As String
Dim MyHun As String
Dim MyFraction As String
Dim MyAnd As String
Dim i As Integer
Dim ReMark As String
If TheNo > 999999999999.99 Then Exit Function
If TheNo < 0 Then
TheNo = TheNo * -1
ReMark = "يتبقى لكم"
Else
ReMark = "فقط"
End If
If TheNo = 0 Then
NoToTxt = "صفر"
Exit Function
End If
MyAnd = "و"
MyArry1(0) = ""
MyArry1(1) = "مائة"
MyArry1(2) = "مائتان"
MyArry1(3) = "ثلاثمائة"
MyArry1(4) = "أربعمائة"
MyArry1(5) = "خمسمائة"
MyArry1(6) = "ستمائة"
MyArry1(7) = "سبعمائة"
MyArry1(8) = "ثمانمائة"
MyArry1(9) = "تسعمائة"
MyArry2(0) = ""
MyArry2(1) = "عشر"
MyArry2(2) = "عشرون"
MyArry2(3) = "ثلاثون"
MyArry2(4) = "أربعون"
MyArry2(5) = "خمسون"
MyArry2(6) = "ستون"
MyArry2(7) = "سبعون"
MyArry2(8) = "ثمانون"
MyArry2(9) = "تسعون"
MyArry3(0) = ""
MyArry3(1) = "واحد"
MyArry3(2) = "اثنان"
MyArry3(3) = "ثلاثة"
MyArry3(4) = "أربعة"
MyArry3(5) = "خمسة"
MyArry3(6) = "ستة"
MyArry3(7) = "سبعة"
MyArry3(8) = "ثمانية"
MyArry3(9) = "تسعة"
GetNo = Format(TheNo, "000000000000.00")
i = 0
Do While i < 15
If i < 12 Then
Myno = Mid$(GetNo, i + 1, 3)
Else
Myno = "0" + Mid$(GetNo, i + 2, 2)
End If
If (Mid$(Myno, 1, 3)) > 0 Then
RdNo = Mid$(Myno, 1, 1)
My100 = MyArry1(RdNo)
RdNo = Mid$(Myno, 3, 1)
My1 = MyArry3(RdNo)
RdNo = Mid$(Myno, 2, 1)
My10 = MyArry2(RdNo)
If Mid$(Myno, 2, 2) = 11 Then My11 = "إحدى عشر"
If Mid$(Myno, 2, 2) = 12 Then My12 = "إثنى عشر"
If Mid$(Myno, 2, 2) = 10 Then My10 = "عشرة"
If ((Mid$(Myno, 1, 1)) > 0) And ((Mid$(Myno, 2, 2)) > 0) Then My100 = My100 + MyAnd
If ((Mid$(Myno, 3, 1)) > 0) And ((Mid$(Myno, 2, 1)) > 1) Then My1 = My1 + MyAnd
GetTxt = My100 + My1 + My10
If ((Mid$(Myno, 3, 1)) = 1) And ((Mid$(Myno, 2, 1)) = 1) Then
GetTxt = My100 + My11
If ((Mid$(Myno, 1, 1)) = 0) Then GetTxt = My11
End If
If ((Mid$(Myno, 3, 1)) = 2) And ((Mid$(Myno, 2, 1)) = 1) Then
GetTxt = My100 + My12
If ((Mid$(Myno, 1, 1)) = 0) Then GetTxt = My12
End If
If (i = 0) And (GetTxt <> "") Then
If ((Mid$(Myno, 1, 3)) > 10) Then
Mybillion = GetTxt + " مليار"
Else
Mybillion = GetTxt + " مليارات"
If ((Mid$(Myno, 1, 3)) = 2) Then Mybillion = " مليار"
If ((Mid$(Myno, 1, 3)) = 2) Then Mybillion = " ملياران"
End If
End If
If (i = 3) And (GetTxt <> "") Then
If ((Mid$(Myno, 1, 3)) > 10) Then
MyMillion = GetTxt + " مليون"
Else
MyMillion = GetTxt + " ملايين"
If ((Mid$(Myno, 1, 3)) = 1) Then MyMillion = " مليون"
If ((Mid$(Myno, 1, 3)) = 2) Then MyMillion = " مليونان"
End If
End If
If (i = 6) And (GetTxt <> "") Then
If ((Mid$(Myno, 1, 3)) > 10) Then
MyThou = GetTxt + " ألف"
Else
MyThou = GetTxt + " آلاف"
If ((Mid$(Myno, 3, 1)) = 1) Then MyThou = " ألف"
If ((Mid$(Myno, 3, 1)) = 2) Then MyThou = " ألفان"
End If
End If
If (i = 9) And (GetTxt <> "") Then MyHun = GetTxt
If (i = 12) And (GetTxt <> "") Then MyFraction = GetTxt
End If
i = i + 3
Loop
If (Mybillion <> "") Then
If (MyMillion <> "") Or (MyThou <> "") Or (MyHun <> "") Then Mybillion = Mybillion + MyAnd
End If
If (MyMillion <> "") Then
If (MyThou <> "") Or (MyHun <> "") Then MyMillion = MyMillion + MyAnd
End If
If (MyThou <> "") Then
If (MyHun <> "") Then MyThou = MyThou + MyAnd
End If
If MyFraction <> "" Then
If (Mybillion <> "") Or (MyMillion <> "") Or (MyThou <> "") Or (MyHun <> "") Then
NoToTxt = ReMark + Mybillion + MyMillion + MyThou + MyHun + " " + MyCur + MyAnd + MyFraction + " " + MySubCur + " " + "لاغير"
Else
NoToTxt = ReMark + MyFraction + " " + MySubCur + " " + "لاغير"
End If
Else
NoToTxt = ReMark + Mybillion + MyMillion + MyThou + MyHun + " " + MyCur + " " + "لاغير"
End If
End Function
الشفرات المستخدمة داخل اليوزرفورم 1 والذى تظهر فيه العمليات الحسابية بناء على حدث click اى بالضغط على الزر الخاص بإظهار النتائج (( نلاحظ بأن بيوزرفورم1 به عدد 2 زر CommandButton احدهما لهذا الأمر والآخر لإغلاق اليوزرفورم ))
'https://elshriefacademy.blogspot.com
Private Sub CommandButton1_Click()
TextBox3.Value = Val(TextBox2) * Val(TextBox1)
TextBox6.Value = Val(TextBox5) * Val(TextBox4)
TextBox9.Value = Val(TextBox8) * Val(TextBox7)
TextBox12.Value = Val(TextBox11) * Val(TextBox10)
TextBox15.Value = Val(TextBox14) * Val(TextBox13)
TextBox16.Value = Val(TextBox3) + Val(TextBox6) + Val(TextBox9) + Val(TextBox12) + Val(TextBox15)
Label1 = NoToTxt(TextBox16.Value, "قرشا", "جنيها")
End Sub
Private Sub CommandButton2_Click()
End
End Sub
نلاحظ التالي :
عملية الضرب نقوم بكتابة الـ TextBox الذى ستظهر به النتيجة فى أول السطر يليه علامة الـ (.) ثم كلمة Value
يتم كتابة كلمة Val قبل الـ TextBox الذى به احد اركان العملية الحسابية ( قيمة رقمية ) والمطلوب ضربه كعملية حسابية فى الـ TextBox الذى بجواره ، ويتم وضع الـ TextBox بين قوسين
ثم كتابة علامه ( * ) الضرب ثم كلمة Val ثم الـ TextBox بين قوسين
أيضا بعملية الجمع ،كذلك بعملية الطرح لو أردنا أو عملية القسمة
نأتى لجزئية التفقيط والتى تظهر لنا بالـ Label وقد تم تخصيص Label1 لكى تظهر به نتيجة التفقيط
نقوم بكتابة الـ Label المخصص كما هو مبين بالشفرة البرمجية أعلاه ثم علامه الـ =
ثم نقوم بإستدعاء اسم الدالة المخصصة للتفقيط وهى هنا NoToTxt
ثم يتم فتح قوسين يكتب بينهم اسم الـ TextBox الذى به الناتج النهائي يليه علامة فاصلة ثم بين اقواس تنصيص مزدوجة يتم كتابة اسم العملة وهى هنا بالجنيه
يمكنك تغييرها مثلا الى دولار وسنت
أما الشفرة البرمجية الخاصة باليوزرفورم2
وهى الخاصة بإظهار النتائج بمجرد مرور الماوس على اليوزرفورم فقط بدون الضغط على أى زر لإظهار النتائج فهى كالتالي
'https://elshriefacademy.blogspot.com
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
TextBox3.Value = Val(TextBox2) * Val(TextBox1)
TextBox6.Value = Val(TextBox5) * Val(TextBox4)
TextBox9.Value = Val(TextBox8) * Val(TextBox7)
TextBox12.Value = Val(TextBox11) * Val(TextBox10)
TextBox15.Value = Val(TextBox14) * Val(TextBox13)
TextBox16.Value = Val(TextBox3) + Val(TextBox6) + Val(TextBox9) + Val(TextBox12) + Val(TextBox15)
Label1 = NoToTxt(TextBox16.Value, "قرشا", "جنيها")
End Sub
Private Sub CommandButton2_Click()
End
End Sub
الاختلاف ما بين اليوزرفورم 1 و 2
ان الثاني لم نستخدم زر امر لإظهار النتائج بل استخدمنا الامر UserForm_MouseMove
ولا ننسي انشاء زر اظهار لكل يوزرفورم
لتحميل النموذج أو الأكواد
لتحميل الكود الخاص بالنموذج الأول
لتحميل الكود الخاص بالنموذج الأول
لتحميل الكود الخاص بالنموذج الثانى
لتحميل الكود الخاص بداله التفقيط