الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعديل كود التفقيط

بدأه الفيلسوف111 في 20 ديسمبر 2019 · 0 رد · 617 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته

هذا مثال رائع للتفقيط للاستاذ ابوهادي

'-- Abo Hadi, 28/07/2003 --'
'-- Last update on 28/07/2006

Option Explicit

Public Const vArabic As Byte = 1
Public Const vEnglish As Byte = 2
Public Const vMale As Byte = 0
Public Const vFemale As Byte = 1

Private Function myNz(ByVal InValue, Optional ByVal ValueIfNull = Null)
  myNz = IIf(IsNull(InValue), IIf(IsNull(ValueIfNull), Empty, ValueIfNull), InValue)
End Function

Private Function Delete(S As String, Index As Integer, Count As Integer) As String
  Delete = Left(S, Index - 1) + _
           Mid(S, Index + Count, Len(S))
End Function

Private Function Insert(Source, S As String, Index As Integer) As String
  Dim LPart As String
  Dim RPart As String
  
  LPart = Left(S, Index - 1)
  RPart = Mid(S, Index, Len(S))
  Insert = LPart & Source & RPart
End Function

Private Function AddAnd(s1 As String, S2 As String, S3 As String, _
                        And_ As String, Lang As Byte) As String
  Dim InAnd_   As String
  Dim CollectS As String
    
  If Lang = vArabic Then InAnd_ = " " + And_ Else InAnd_ = And_ + " "
  If (s1 <> "") And (S2 <> "") Then And_ = InAnd_ Else And_ = ""
  CollectS = s1 + And_ + S2
  If (CollectS <> "") And (S3 <> "") Then And_ = InAnd_ Else And_ = ""
  AddAnd = CollectS + And_ + S3
End Function

Private Function S2Double(Single_ As Variant, Sex As Byte) As String
  Dim LLeter As Integer
  Dim K      As Byte
  Dim Sngl_1 As String
  Dim Sngl_2 As String
  
  K = InStr(1, Single_ & " ", " ")
  Sngl_1 = Left(Single_, K - 1)
  Sngl_2 = ""
  If K < Len(Single_) Then
    Sngl_2 = Mid(Single_, K + 1, Len(Single_))
  End If
  
  If Sngl_2 <> "" Then
    If Right(Sngl_2, 1) = "ة" Then
      Sngl_2 = Left(Sngl_2, Len(Sngl_2) - 1) & "تان"
    Else
      Sngl_2 = Sngl_2 & "ان"
    End If
  End If
  
  If Sngl_1 <> "" Then LLeter = Asc(Right(Sngl_1, 1))
  
  Select Case LLeter
    Case 201 ' "ة"
      Sngl_1 = Left(Sngl_1, Len(Sngl_1) - 1) & "تان"
    Case 236 ' "ى"
      Sngl_1 = Left(Sngl_1, Len(Sngl_1) - 1) & "يان"
    Case 199 ' "ا"
      Sngl_1 = Left(Sngl_1, Len(Sngl_1) - 1) & "وان"
    Case 193 ' "ء"
      If Right(Sngl_1, 2) = "اء" Then
        If Sex = 1 Then
          Sngl_1 = Left(Sngl_1, Len(Sngl_1) - 1) & "وان"
        Else
          Sngl_1 = Sngl_1 & "ان"
        End If
      End If
    Case Else
      If Sngl_1 <> "" Then Sngl_1 = Sngl_1 & "ان"
  End Select
  
  If Sngl_2 <> "" Then
    S2Double = Sngl_1 & " " & Sngl_2
  Else
    S2Double = Sngl_1
  End If
End Function

Private Function Fmale(Num As Byte, Sex As Byte, Female()) As String
  Dim Two(1 To 4) As String
  Dim InSex As Byte
    
  Two(1) = "أحد"
  Two(2) = "اثنان"
  Two(3) = "إحدى"
  Two(4) = "ة"
      
  Select Case Sex
    Case vMale:
      Select Case Num
        Case 1:             Fmale = Mid(Female(1), 1, 4)
        Case 2:             Fmale = Two(2)
        Case 8:             Fmale = Female(Num) + "ي" + Two(4)
        Case 3 To 7, 9, 10: Fmale = Female(Num) + Two(4)
        Case 11:            Fmale = Two(1) + " " + Female(10)
        Case 12:            Fmale = Mid(Two(2), 1, 4) + " " + Female(10)
        Case 13 To 19:      Fmale = Female(Num - 10) + Two(4) + " " + Female(10)
      End Select
    Case vFemale:
      Select Case Num
        Case 1 To 10:       Fmale = Female(Num)
        Case 11:            Fmale = Two(3) + " " + Female(10) + Two(4)
        Case 12:            Fmale = Mid(Female(2), 1, 5) + " " + Female(10) + Two(4)
        Case 13 To 19:      Fmale = Female(Num - 10) + " " + Female(10) + Two(4)
      End Select
    End Select
End Function

Private Function Tens(Num As Byte, Female()) As String
  Const Noon = "ون"
      
  Select Case Num
    Case 2:      Tens = Female(10) + Noon
    Case 3 To 9: Tens = Female(Num) + Noon
  End Select
End Function

Private Function Hunds(Num As Byte, Female()) As String
  Const Hund = "مائة"
      
  Select Case Num
    Case 1:      Hunds = Hund
    Case 2:      Hunds = Mid(Hund, 1, 3) + Mid(Female(2), 4, 3)
    Case 3 To 9: Hunds = Female(Num) + Hund
   End Select
End Function

Private Function Tenteen(Num As Byte, ETens()) As String
  Const een = "een"
  
  Num = Num Mod 10
  Select Case Num
    Case 3 To 9:
      Tenteen = Mid(ETens(Num), 1, Len(ETens(Num)) - 1) + een
  End Select
End Function

Private Function EHunds(Num As Byte, ESingle()) As String
  EHunds = ESingle(Num) + " hundred"
End Function

Private Function AOnly(Num_ As String, FracS As String, Single_ As String, _
                       Plural As String, Parts As Byte, Sex As Byte, Dec As Byte) As String
  
  Const And_ As String * 1 = "و"
  
  
  Const Lang = vArabic
  Dim PartNum(0 To 7) As Long
  Dim Result1(0 To 8) As String
  Dim Parts_(0 To 13) As String
  Dim Female(1 To 10) As Variant
  Dim TempI           As Byte
  Dim Sex2            As Byte
  Dim K               As Byte
  Dim Only_           As String
  Dim OnlyPart        As String
  Dim Part_           As String
  Dim TempS           As String
  Dim Sngl_1          As String
  Dim Sngl_2          As String
  Dim n1  As Byte, N2    As Byte, n3    As Byte
  Dim N1_ As String, N2_ As String, N3_ As String
    
  If Val(Num_) = 0 Then
    If FracS = "" Then
      AOnly = RTrim("صفر " & Single_)
    Else
      AOnly = FracS & " " & Single_
    End If
    Exit Function
  End If
  
  Female(1) = "واحدة"
  Female(2) = "اثنتان"
  Female(3) = "ثلاث"
  Female(4) = "أربع"
  Female(5) = "خمس"
  Female(6) = "ست"
  Female(7) = "سبع"
  Female(8) = "ثمان"
  Female(9) = "تسع"
  Female(10) = "عشر"
   
  Parts_(0) = ""
  Parts_(1) = "ألف"
  Parts_(2) = "مليون"
  Parts_(3) = "مليار"
  Parts_(4) = "ترليون"
  Parts_(5) = "كدرليون"
  Parts_(6) = "كوينتليون"
  Parts_(7) = ""
  Parts_(8) = "آلاف"
  Parts_(9) = "ملايين"
  Parts_(10) = "مليارات"
  Parts_(11) = "ترليونات"
  Parts_(12) = "كدرليونات"
  Parts_(13) = "كوينتليونات"
  
  K = InStr(1, Single_ & " ", " ")
  Sngl_1 = Left(Single_, K - 1)
  Sngl_2 = ""
  If K < Len(Single_) Then
    Sngl_2 = Mid(Single_, K + 1, Len(Single_))
  End If
  
  If Sngl_2 <> "" And InStr(2, Plural, Sngl_2) > 0 Then
    Sngl_2 = ""
  End If
  
  For K = 0 To Parts - 1
    PartNum(K) = Val(Mid(Num_, (K * 3) + 1, 3))
  Next K
    
    Sex2 = Sex
    For K = 0 To (Parts - 1)
      If K = (Parts - 1) Then Sex = Sex2 Else Sex = vMale
      TempS = Mid(Num_, (K * 3) + 1, 3)
      TempI = Val(Mid(TempS, 2, 2))
      
      n1 = Val(Mid(TempS, 1, 1))
      N2 = Val(Mid(TempS, 2, 1))
      n3 = Val(Mid(TempS, 3, 1))
      '{------------------------------------------}
      N1_ = "": N2_ = "": N3_ = ""
      If n1 > 0 Then N1_ = Hunds(CByte(n1), Female())
      If PartNum(K) = 200 Then N1_ = Mid(N1_, 1, Len(N1_) - 1)
      Select Case TempI
        Case 1 To 2:
          If K = Parts - 1 Then If FracS <> "" Then N3_ = Fmale(n3, CByte(Sex), Female())  'Sex
        Case 3 To 19:
          N3_ = Fmale(TempI, CByte(Sex), Female())
        Case 20 To 99:
          N2_ = Tens(CByte(N2), Female())
          If n3 > 0 Then N3_ = Fmale(n3, CByte(Sex), Female())
          If (n3 Mod 10 = 1) And (Sex = vFemale) Then N3_ = "إحدى"
      End Select
      OnlyPart = AddAnd(N1_, N3_, N2_, And_, Lang)
      '{------------------------------------------}
      If PartNum(K) > 100 Then
        Select Case TempI
          Case 1, 2:
            OnlyPart = AddAnd(OnlyPart, Parts_(Parts - K - 1), "", "", Lang)
        End Select
      End If
      '{------------------------------------------}
      Part_ = ""
      If PartNum(K) > 0 Then
        Part_ = Parts_(Parts - K - 1)
        If Part_ <> "" Then
          Select Case TempI
            Case 2:        Part_ = Part_ + "ان"
            Case 3 To 10:  Part_ = Parts_((Parts - K - 1) + 7)
            Case 11 To 99: Part_ = Part_ + "ا"
          End Select
        End If
      End If
      '{------------------------------------------}
      If Part_ <> "" Then
        If TempI >= 1 And TempI <= 2 Then
           OnlyPart = AddAnd(OnlyPart, Part_, "", And_, Lang)
        Else
          OnlyPart = AddAnd(OnlyPart, Part_, "", "", Lang)
        End If
      End If
      Result1(K) = OnlyPart
    Next K
    '{------------------------------------------}
    For K = 0 To Parts - 1
      Only_ = AddAnd(Only_, Result1(K), "", And_, Lang)
    Next K

    If FracS <> "" Then
      If Only_ <> "" Then FracS = " " + FracS
      Only_ = AddAnd(Only_, FracS, "", And_, Lang)
    End If
    If Only_ <> "" Then
      If Mid(Only_, Len(Only_), 1) = "ا" Then
        If Mid(Only_, Len(Only_) - 1, 2) <> "تا" Then
          Only_ = Mid(Only_, 1, Len(Only_) - 1)
        End If
      End If
      If TempS = "000" Then
        If Mid(Only_, Len(Only_) - 1, 2) = "ان" Then
          Only_ = Mid(Only_, 1, Len(Only_) - 1)
        End If
      End If
    End If
    '{------------------------------------------}
    If FracS = "" Then
      Select Case TempI
        Case 0: If Only_ <> "" Then Only_ = AddAnd(Only_, Single_, "", "", Lang)
        Case 1: Only_ = AddAnd(Only_, AddAnd(Single_, Fmale(1, CByte(Sex), Female()), "", "", Lang), "", And_, Lang)
        Case 2: Only_ = AddAnd(Only_, AddAnd(S2Double(Single_, CByte(Sex)), Fmale(2, CByte(Sex), Female()), "", "", Lang), "", And_, Lang)
        Case 3 To 10:
          If Sngl_2 <> "" Then
            If Right(Sngl_2, 1) = "ة" Then
              Only_ = AddAnd(Only_, Plural, Sngl_2, "", Lang)
            Else
              Only_ = AddAnd(Only_, Plural, Sngl_2 & "ة", "", Lang)
            End If
          Else
            Only_ = AddAnd(Only_, Plural, "", "", Lang)
          End If
        Case 11 To 99:
          If Sngl_1 <> "" Then
            Only_ = AddAnd(Only_, Sngl_1, "", "", Lang)
            N1_ = Mid(Only_, Len(Only_), 1)
            Select Case N1_
              Case "ة", "ى", "ا"
              Case Else
                Only_ = Only_ + "ا"
            End Select
            N1_ = Mid(Only_, Len(Only_) - 2, 3)
            'هذا الشرط لحل مشكلة عدم التمييز بين "ء" و "ل" 2002/08/24
            If N1_ = "اءا" And Asc(Right(Sngl_1, 1)) = 193 Then
              Only_ = Left(Only_, Len(Only_) - 1)
            End If
            If Sngl_2 <> "" Then
              If Right(Only_, 1) = "ا" Then
                Only_ = AddAnd(Only_, Sngl_2 & "ا", "", "", Lang)
              Else
                Only_ = AddAnd(Only_, Sngl_2, "", "", Lang)
              End If
            Else
              Only_ = AddAnd(Only_, Sngl_2, "", "", Lang)
            End If
          End If
      End Select
    Else
      Only_ = AddAnd(Only_, Sngl_1, Sngl_2, "", Lang)
    End If
    AOnly = (Only_)
End Function

Private Function EOnly(Num_ As String, FracS As String, Single_ As String, _
                       Plural As String, Parts As Byte, Dec As Byte) As String
  Const Lang = vEnglish
  Dim ESingle(1 To 12) As Variant
  Dim ETens(2 To 9)    As Variant
  Dim EParts_(0 To 6)  As String
  Dim PartNum(0 To 6)  As Long
  Dim Result1(0 To 6)  As String
  Dim TempS            As String
  Dim TempI            As Byte
  Dim Sex2             As Byte
  Dim OnlyPart         As String
  Dim Part_            As String
  Dim Only_            As String
  Dim LENG             As Integer
  Dim K                As Integer
  Dim n1  As Byte, N2    As Byte, n3    As Byte
  Dim N1_ As String, N2_ As String, N3_ As String
  
  If Val(Num_) = 0 Then
    If FracS = "" Then
      EOnly = RTrim("zero " & Single_)
    Else
      EOnly = Single_ & " " & FracS
    End If
    Exit Function
  End If
  
  ESingle(1) = "one"
  ESingle(2) = "two"
  ESingle(3) = "three"
  ESingle(4) = "four"
  ESingle(5) = "five"
  ESingle(6) = "six"
  ESingle(7) = "seven"
  ESingle(8) = "eight"
  ESingle(9) = "nine"
  ESingle(10) = "ten"
  ESingle(11) = "eleven"
  ESingle(12) = "twelve"
  
  ETens(2) = "twenty"
  ETens(3) = "thirty"
  ETens(4) = "forty"
  ETens(5) = "fifty"
  ETens(6) = "sixty"
  ETens(7) = "seventy"
  ETens(8) = "eighty"
  ETens(9) = "ninety"
  
  EParts_(0) = ""
  EParts_(1) = "thousund"
  EParts_(2) = "million"
  EParts_(3) = "billion"
  EParts_(4) = "trillion"
  EParts_(5) = "quadrillion"
  EParts_(6) = "quintillion"
  
  For K = 0 To Parts - 1
    PartNum(K) = Val(Mid(Num_, (K * 3) + 1, 3))
  Next K
  
  For K = 0 To (Parts - 1)
    TempS = Mid(Num_, (K * 3) + 1, 3)
    TempI = Val(Mid(TempS, 2, 2))
    n1 = Val(Mid(TempS, 1, 1))
    N2 = Val(Mid(TempS, 2, 1))
    n3 = Val(Mid(TempS, 3, 1))
    '{------------------------------------------}
    N1_ = "": N2_ = "": N3_ = ""
    If n1 > 0 Then N1_ = EHunds(CByte(n1), ESingle())
    Select Case TempI
      Case 1 To 12:  N3_ = ESingle(TempI)
      Case 13 To 19: If n3 > 0 Then N3_ = Tenteen(CByte(TempI), ETens())
      Case 20 To 99:
        N2_ = ETens(N2)
        If n3 > 0 Then
          N3_ = N2_ + "-" + ESingle(n3)
          N2_ = ""
        End If
    End Select
    OnlyPart = AddAnd(N1_, N2_, N3_, "", Lang)
    '{------------------------------------------}
    Part_ = ""
    If PartNum(K) > 0 Then
      Part_ = EParts_(Parts - K - 1)
      If Part_ <> "" Then Part_ = EParts_((Parts - K - 1))
    End If
    Result1(K) = AddAnd(OnlyPart, Part_, "", "", Lang)
  Next K
  '{------------------------------------------}
  For K = 0 To Parts - 1
    Only_ = AddAnd(Only_, Result1(K), "", "", Lang)
  Next K
  
  LENG = Len(Only_)
  Only_ = AddAnd(Only_, FracS, "", " and", Lang)
  If Only_ <> "" Then
    If Val(Num_) = 1 Then
      Only_ = AddAnd(Only_, Single_, "", "", Lang)
    Else
      Only_ = AddAnd(Only_, Plural, "", "", Lang)
    End If
    EOnly = Only_
  End If
End Function

Private Function S_Only(InNum As Variant, Lang As Byte, FracType As Byte) As Variant
  Dim Num_  As String
  Dim K     As Byte
  Dim Dec   As Byte
  Dim FType As Byte
  
  If IsNull(InNum) Then
    S_Only = Null
    Exit Function
  End If
  
  Num_ = CStr(InNum)
  K = InStr(1, Num_, ".", 1)
  If K > 0 Then
    Dec = Len(Num_) - K
   'If Dec < 2 Then Dec = 2
  Else
   Dec = 0
  End If
  
  FType = FracType
  If FType <> 2 Then FType = 1
  
  S_Only = B_Only(InNum, Lang, 0, Dec, "", "", 0, "", "", FType)
End Function
  
Private Function B_Only(InNum As Variant, Lang As Byte, Sex As Byte, Dec As Byte, _
                        Single_ As String, Plural As String, _
                        FSex As Byte, SFrac As String, PFrac As String, _
                        FracType As Byte) As Variant
  Dim LENG    As Byte
  Dim Parts   As Byte
  Dim K       As Byte
  Dim FracVal As Double
  Dim Num_    As String
  Dim FracS   As String
  Dim FracNum As String
  Dim Only    As String
  Dim And_    As String
  
  If IsNull(InNum) Then
    B_Only = Null
    Exit Function
  End If
  
  If Dec > 6 Then Dec = 6
  Num_ = Format(InNum, "0" & IIf(Dec > 0, ".", "") & String(Dec, "0"))
  If Dec > 0 Then FracS = "0." & Right(Num_, Dec) Else FracS = ""
  If Dec > 0 Then Num_ = Left(Num_, Len(Num_) - Dec - 1)
  FracVal = Val(FracS)
  
  Do While Len(FracS) < Dec + 2
    FracS = Insert(FracS, "0", 1)
  Loop

DoProcess:
  If FracVal = 0 Then FracS = ""
  FracNum = Trim(Mid(FracS, 3, Len(FracS)))
  If FracS <> "" Then
    Select Case FracType
      Case 2
        Select Case Lang
          Case vArabic:  FracS = "1" & String(Dec, "0") & "/" & CDbl(Format(FracNum, String(Dec, "0")))
          Case vEnglish: FracS = CDbl(Format(FracNum, String(Dec, "0"))) & "/" & "1" & String(Dec, "0")
        End Select
      Case 3
        Select Case Lang
          Case vArabic:  FracS = CLng(FracNum) & " " & IIf(FracNum >= 3 And FracNum <= 10, PFrac, SFrac)
          Case vEnglish: FracS = CLng(FracNum) & " " & IIf(FracNum > 1, PFrac, SFrac)
        End Select
      Case 4
        LENG = Len(FracNum)
        Parts = Fix((LENG + 2) / 3)
        For K = 1 To (Parts * 3) - LENG
          FracNum = Insert("0", FracNum, 1)
        Next K
        Select Case Lang
          Case vArabic:  FracS = AOnly(FracNum, "", SFrac, PFrac, Parts, FSex, FracType)
          Case vEnglish: FracS = EOnly(FracNum, "", SFrac, PFrac, Parts, 0)
        End Select
    End Select
  End If
  
  LENG = Len(Num_)
  Parts = Fix((LENG + 2) / 3)
  
  If Parts > 7 Then
    B_Only = InNum
    Exit Function
  End If
  
  For K = 1 To (Parts * 3) - LENG
    Num_ = Insert("0", Num_, 1)
  Next K
  
  Select Case FracType
    Case 1, 2
      Select Case Lang
        Case vArabic:  Only = AOnly(Num_, FracS, Single_, Plural, Parts, Sex, Dec)
        Case vEnglish: Only = EOnly(Num_, FracS, Single_, Plural, Parts, Dec)
      End Select
    Case 3, 4
      Select Case Lang
        Case vArabic:  Only = AOnly(Num_, "", Single_, Plural, Parts, Sex, Dec)
                       If CDbl(Num_) = 0 And FracS <> "" Then Only = ""
                       If FracType = 3 Then And_ = "و " Else And_ = "و"
                       If FracS <> "" Then Only = AddAnd(Only, FracS, "", And_, CByte(Lang))
        Case vEnglish: Only = EOnly(Num_, "", Single_, Plural, Parts, Dec)
                       If CDec(Num_) = 0 And FracS <> "" Then Only = ""
                       If FracS <> "" Then Only = AddAnd(Only, FracS, "", " and", CByte(Lang))
      End Select
  End Select
  
  If Only <> "" Then
    Select Case Lang
      Case vArabic:  B_Only = Only
      Case vEnglish: B_Only = Only
    End Select
  End If
End Function

Function ArbNum2Text(ByVal InNum, _
            Optional ByVal DecimalPlaces = Null, _
            Optional ByVal FractionType = 1, _
            Optional ByVal CurrencySingle = "", _
            Optional ByVal CurrencyPlural = "", _
            Optional ByVal CurrencySex = 0, _
            Optional ByVal FractionSingle = "", _
            Optional ByVal FractionPlural = "", _
            Optional ByVal FractionSex = 0) As Variant
        
  Dim Negative As String
  
  If IsNull(InNum) Then
    ArbNum2Text = Null
    Exit Function
  Else
    If InNum < 0 Then
      InNum = Abs(InNum)
      Negative = "سالب "
    End If
  End If
  
  If IsNull(FractionType) Then FractionType = 1
  
  If myNz(CurrencySingle) = Empty Or myNz(CurrencyPlural) = Empty Then
    If Not IsNull(DecimalPlaces) Then
      InNum = Format(InNum, "0" & IIf(DecimalPlaces > 0, ".", "") & String(DecimalPlaces, "0"))
    End If
    ArbNum2Text = Negative & S_Only(InNum, vArabic, CByte(FractionType))
    Exit Function
  End If
  
  If IsNull(DecimalPlaces) Then DecimalPlaces = 2
  InNum = Format(InNum, "0" & IIf(DecimalPlaces > 0, ".", "") & String(DecimalPlaces, "0"))
 
 'If InNum <> Fix(InNum) Then
  If Val(Right(InNum, DecimalPlaces)) > 0 Then
    If myNz(FractionSingle) = Empty Or myNz(FractionPlural) = Empty Then
      If FractionType > 2 Then FractionType = 1
    End If
  End If
       
  ArbNum2Text = Negative & _
                B_Only(CDec(myNz(InNum, 0)), vArabic, CByte(myNz(CurrencySex)), _
                       CByte(myNz(DecimalPlaces)), CStr(myNz(CurrencySingle)), _
                       CStr(myNz(CurrencyPlural)), CByte(myNz(FractionSex)), _
                       CStr(myNz(FractionSingle)), CStr(myNz(FractionPlural)), _
                       CByte(myNz(FractionType)))
End Function

Function EngNum2Text(ByVal InNum, _
            Optional ByVal DecimalPlaces = Null, _
            Optional ByVal FractionType = 1, _
            Optional ByVal CurrencySingle = "", _
            Optional ByVal CurrencyPlural = "", _
            Optional ByVal FractionSingle = "", _
            Optional ByVal FractionPlural = "") As Variant

  Dim Negative As String
  
  If IsNull(InNum) Then
    EngNum2Text = Null
    Exit Function
  Else
    If InNum < 0 Then
      InNum = Abs(InNum)
      Negative = "Negative "
    Else
      Negative = ""
    End If
  End If
  
  If IsNull(FractionType) Then FractionType = 1
  If myNz(CurrencyPlural) = Empty Then CurrencyPlural = myNz(CurrencySingle, "")
  If myNz(FractionPlural) = Empty Then FractionPlural = myNz(FractionSingle, "")
  
  If myNz(CurrencySingle) = Empty Then
    If Not IsNull(DecimalPlaces) Then
      InNum = Format(InNum, "0" & IIf(DecimalPlaces > 0, ".", "") & String(DecimalPlaces, "0"))
    End If
    EngNum2Text = Negative & S_Only(InNum, vEnglish, CByte(FractionType))
    Exit Function
  End If
  
  If IsNull(DecimalPlaces) Then DecimalPlaces = 2
  InNum = Format(InNum, "0" & IIf(DecimalPlaces > 0, ".", "") & String(DecimalPlaces, "0"))
 
 'If InNum <> Fix(InNum) Then
  If Val(Right(InNum, DecimalPlaces)) > 0 Then
    If myNz(FractionSingle) = Empty Then
      If FractionType > 2 Then FractionType = 1
    End If
  End If
  
  EngNum2Text = Negative & _
                B_Only(CDec(myNz(InNum, 0)), vEnglish, 0, _
                       CByte(myNz(DecimalPlaces)), CStr(myNz(CurrencySingle)), _
                       CStr(myNz(CurrencyPlural)), 0, _
                       CStr(myNz(FractionSingle)), CStr(myNz(FractionPlural)), _
                       CByte(myNz(FractionType)))
End Function

Sub Test()
  Dim Num As Variant
  Dim DecimalPlaces As Byte
  Dim FractionType
  
  Num = -22.22
  DecimalPlaces = 2
  FractionType = 4
  
  'MsgBox ArbNum2Text(Num, DecimalPlaces, FractionType, "ريال", "ريالات", 0, "هللة", "هللات", 1)
  'MsgBox EngNum2Text(Num, DecimalPlaces, FractionType, "Saudi Riyal", "Saudi Riyals", "Halala", "Halalas")
  MsgBox ArbNum2Text(CDec("-123456789012345678901.123456"))
End Sub

كيف يمكن ان استبدل هذه الجملة  Const And_ As String * 1 ="و"

 بهذه الجملة
Const And_ As String * 1 = DLast("[waw]", "[hrof]")
 حيث Const لا تقبل هذا الكود 

Private Function AOnly(Num_ As String, FracS As String, Single_ As String,Plural As String, Parts As Byte, Sex As Byte, Dec As Byte) As String
Const And_ As String * 1 ="و"
' بهذه الجملة
Const And_ As String * 1 = DLast("[waw]", "[hrof]")
' حيث Const لا تقبل هذا الكود

طارق العيد

مواضيع مشابهة