Function SpellNumberKyats(ByVal MyNumber As String) As String
Dim KyatsPart As String, PyasPart As String
Dim Result As String
Dim DecimalPos As Integer
' Find decimal position
DecimalPos = InStr(1, MyNumber, ".")
' Separate Kyats and Pyas parts
If DecimalPos > 0 Then
KyatsPart = Left(MyNumber, DecimalPos - 1) ' Get the whole number part
PyasPart = Mid(MyNumber, DecimalPos + 1) ' Get the decimal part
If Len(PyasPart) = 1 Then PyasPart = PyasPart & "0" ' Ensure two digits for Pyas
PyasPart = Left(PyasPart, 2) ' Take only two decimal places
Else
KyatsPart = MyNumber
PyasPart = "00"
End If
' Convert Kyats part
If Val(KyatsPart) > 0 Then
Result = ConvertNumberToWords(KyatsPart) & " Kyats"
End If
' Convert Pyas part if it's not zero
If Val(PyasPart) > 0 Then
If Result <> "" Then Result = Result & " and "
Result = Result & ConvertNumberToWords(PyasPart) & " Pyas"
End If
' Add "only" at the end
SpellNumberKyats = Result & " only"
End Function
' Convert numbers to words
Function ConvertNumberToWords(ByVal MyNumber As String) As String
Dim Units As String
Dim TempStr As String
Dim Count As Integer
Dim Place(9) As String
Dim Digits As String
' Define place values
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' Remove leading zeros
MyNumber = Trim(Str(Val(MyNumber)))
Count = 1
Do While MyNumber <> ""
Digits = Right(MyNumber, 3)
MyNumber = Left(MyNumber, Len(MyNumber) - Len(Digits))
If Val(Digits) > 0 Then
TempStr = GetHundreds(Digits) & Place(Count) & TempStr
End If
Count = Count + 1
Loop
ConvertNumberToWords = [Link](TempStr)
End Function
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
End If
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Trim(Result)
End Function
Function GetTens(TensText)
Dim Result As String
If Val(Left(TensText, 1)) = 1 Then
Select Case Val(TensText)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else
Select Case Val(Left(TensText, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
Result = Result & GetDigit(Right(TensText, 1))
End If
GetTens = Trim(Result)
End Function
Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = "One"
Case 2: GetDigit = "Two"
Case 3: GetDigit = "Three"
Case 4: GetDigit = "Four"
Case 5: GetDigit = "Five"
Case 6: GetDigit = "Six"
Case 7: GetDigit = "Seven"
Case 8: GetDigit = "Eight"
Case 9: GetDigit = "Nine"
Case Else: GetDigit = ""
End Select
End Function