الجمع والضرب والتفقيط

vba,Userform,اكاديميه محمود زكى الشريف,محمود زكى الشريف,الجمع والضرب والتفقيط داخل اليوزرفورم,العمليات الحسابية فى اليوزرفورم
العمليات الحسابية 
سوف نتعرف على كيفية العمليات الحسابية وكذلك التفقيط من خلال يوزرفورم & Userform

اجراء العمليات الحسابية داخل اليوزرفورم هى عملية حسابية عادية جدا ليس فيها أى صعوبة
ولكنها تعتمد على الأمر الذى تقوم بكتابته بشكل برمجى والحدث

وسوف نتطرق الى طريقتين 


  1. اجراء العمليات الحسابية من خلال أوامر برمجيه داخل زر CommandButton
  2. من خلال مرور الماوس على اليوزرفورم 


لنلق نظرة أولا على شكل اليوزر فورم ثم نتطرق الى التصميم وبعدها الى الأكواد البرمجية المستخدمة 
vba,Userform,اكاديميه محمود زكى الشريف,محمود زكى الشريف,الجمع والضرب والتفقيط داخل اليوزرفورم,العمليات الحسابية فى اليوزرفورم

الخطوات الأولي
  1. اضغط على Alt + F11 للدخول الى محرر الأكواد
  2. اضغط كليك يمين على يسار المحرر داخل نافذة Project-VBAProject 
  3. اختر من القائمة التى تظهر Insert
  4. اختر منها Userform
  5. كرر الخطوات السابقة مرتين لإنشاء عدد 2 يوزرفورم

الخطوات الثانية مكونات كل يوزرفورم لكى يتم اضافتها لكل منهما
  1. نضغط بالماوس على يوزرفورم 1 
  2. ثم نضغط على أيقونة Toolbox من شريط القوائم أعلى نافذة المحرر
  3. ثم نختار منها مكونات كل يوزرفورم كما سيلي 
  4. كذلك الحال بالنسبة لليوزرفورم رقم 2


مكونات اليوزرفورم 1
  1. عدد 10 Label
  2. عدد 16 TextBox
  3. عدد 2 CommandButton

مكونات اليوزرفورم 2
  1. عدد 10 Label
  2. عدد 16 TextBox
  3. عدد 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 

ولا ننسي انشاء زر اظهار لكل يوزرفورم 

لتحميل النموذج أو الأكواد
لتحميل الكود الخاص بالنموذج الأول
لتحميل الكود الخاص بالنموذج الثانى
لتحميل الكود الخاص بداله التفقيط
Developer MS Office VBA Application, Data Analyst, Designer And Developer of Blogger Templates, Microfinance, HR Specialist, leading businesses, Front End Web Developer.

More About

تعليقان (2)

  1. عمل طيب وجميل جزاكم الله كل خير
    1. وجزاكم الله خير الخير