Funció per convertir al català números en lletres utilitzant codi VBA des d’Access
Per convertir al català números en lletres podeu utilitzar la següent funció, escrita originalment per convertir al castellà números en lletres i que he adaptat perquè ho faci en català. El codi original l'he extret d'aportacions publicades a Internet.
Per utilitzar aquesta funció l'heu de guardar en un mòdul d'Access i després cridar-la des d'un quadre de text en un informe utilitzant com a paràmetre l'import informant en un altre quadre de text del mateix informe.
En la vista disseny quedaria així:
En la vista informe quedaria així:
Podeu descarregar el fitxer d'exemple: Exemple convertir números a lletres.accdb
En aquest exemple també trobareu el codi per convertir al castellà números a lletres
El codi de la funció que hem d'introduir en el mòdul és:
Function CONVIERTEEUROSCAT(ByVal NUM As Variant) As String
Dim C As String: C = ""
Dim A As Double
Dim Un As Byte
Dim De As Byte
Dim Ce As Byte
Dim Un_Ma As Byte
Dim De_Ma As Byte
Dim Ce_Ma As Byte
Dim Un_Mo As Byte
Dim De_Mo As Byte
Dim Ce_Mo As Byte
Dim Un_Ma_Mo As Byte
Dim De_Ma_Mo As Byte
Dim Ce_Ma_Mo As Byte
Dim G As String 'genero.
Dim A2 As String
Dim F As Double
Dim D As String
Dim BO As Boolean
Dim Deci As String
Dim Ente As String
Dim Bo_Deci As Boolean
Dim AD As Double
Dim Un_De As Byte
Dim De_De As Byte
Dim Ce_De As Byte
Dim E As String
Dim Ant_D As String
Rem adaptación del programa a un entorno externo
Dim Moneda_Programa As String 'Eur/Pts
Moneda_Programa = "Eur"
Rem adaptación del programa a un entorno externo
NUM = CONTROL_CDEC(NUM)
Select Case Moneda_Programa
Case "Pts"
G = "a"
NUM = Round(NUM)
Case "Eur"
G = ""
End Select
A2 = CStr(NUM)
Ente = ""
Deci = ""
BO = False
Bo_Deci = False
For F = 1 To Len(A2)
D = Mid(A2, F, 1)
If D = "." Then D = ","
If D = "," Then BO = True: D = "": Bo_Deci = True
Select Case BO
Case False
Ente = Ente + D
Case True
Deci = Deci + D
End Select
Next F
If Len(Deci) > 3 Then Deci = Left(LTrim(Deci), 3)
A = CDbl(Ente)
If Bo_Deci = True Then AD = CDbl(Deci)
If A > 999999999999# Then CONVIERTEEUROSCAT = CStr(NUM): Exit Function
'
Un = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
C = ""
'
Select Case Ce_Ma_Mo
Case 1
If (Un_Ma_Mo = 0 And De_Ma_Mo = 0) Then
C = C + "cent mil"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents"
Case 3
C = C + "tres-cents"
Case 4
C = C + "quatre-cents"
Case 5
C = C + "cinc-cents"
Case 6
C = C + "sis-cents"
Case 7
C = C + "set-cents"
Case 8
C = C + "vuit-cents"
Case 9
C = C + "nou-cents"
End Select
If Ce_Ma_Mo > 1 And (De_Ma_Mo = 0 And Un_Ma_Mo = 0) Then
C = C + " mil"
End If
'
'
Select Case De_Ma_Mo
Case 1
If Un_Ma_Mo <> 0 Then
If De_Ma_Mo = 1 And Un_Ma_Mo = 1 Then C = C + " once mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 2 Then C = C + " dotze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 3 Then C = C + " tretze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 4 Then C = C + " catorze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 5 Then C = C + " quinze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo > 5 Then C = C + " di"
Else
C = C + " deu mil"
End If
Case 2
If Un_Ma_Mo <> 0 Then
C = C + " vint-i-"
Else
C = C + " vint mil"
End If
Case 3
If Un_Ma_Mo <> 0 Then
C = C + " trenta"
Else
C = C + " trenta mil"
End If
Case 4
If Un_Ma_Mo <> 0 Then
C = C + " quaranta"
Else
C = C + " quaranta mil"
End If
Case 5
If Un_Ma_Mo <> 0 Then
C = C + " cincuanta"
Else
C = C + " cincuanta mil"
End If
Case 6
If Un_Ma_Mo <> 0 Then
C = C + " seixanta"
Else
C = C + " seixanta mil"
End If
Case 7
If Un_Ma_Mo <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 8
If Un_Ma_Mo <> 0 Then
C = C + " vuitanta"
Else
C = C + " vuitanta mil"
End If
Case 9
If Un_Ma_Mo <> 0 Then
C = C + " noranta"
Else
C = C + " noranta mil"
End If
End Select
'
'
'
If De_Ma_Mo = 1 And Un_Ma_Mo = 1 Then GoTo SaltaUnidades_Millar_Millon '11
If De_Ma_Mo = 1 And Un_Ma_Mo = 2 Then GoTo SaltaUnidades_Millar_Millon '12
If De_Ma_Mo = 1 And Un_Ma_Mo = 3 Then GoTo SaltaUnidades_Millar_Millon '13
If De_Ma_Mo = 1 And Un_Ma_Mo = 4 Then GoTo SaltaUnidades_Millar_Millon '14
If De_Ma_Mo = 1 And Un_Ma_Mo = 5 Then GoTo SaltaUnidades_Millar_Millon '15
'PREFIJOS
If (De_Ma_Mo > 2 And Un_Ma_Mo <> 0) Then C = C + "-"
If (De_Ma_Mo <= 2 And (Un_Ma_Mo <> 0 And De_Ma_Mo <> 0)) Then C = C + ""
'
Select Case Un_Ma_Mo
Case 1
If (De_Ma_Mo = 0 And Ce_Ma_Mo = 0) Then
C = C + " mil"
Else
C = C + "un mil"
End If
Case 2
C = C + "dos mil"
Case 3
C = C + "tres mil"
Case 4
C = C + "quatre mil"
Case 5
C = C + "cinc mil"
Case 6
C = C + "sis mil"
Case 7
C = C + "set mil"
Case 8
C = C + "vuit mil"
Case 9
C = C + "nou mil"
End Select
SaltaUnidades_Millar_Millon:
'
'
'PREFIJO
C = C + " " 'espacio para las unidades de millar de millon
Select Case Ce_Mo
Case 1
If (Un_Mo = 0 And De_Mo = 0) Then
C = C + "cent"
Else
C = C + "cent "
End If
Case 2
C = C + "dos-cents"
Case 3
C = C + "tres-cents"
Case 4
C = C + "quatre-cents"
Case 5
C = C + "cinc-cents"
Case 6
C = C + "sis-cents"
Case 7
C = C + "set-cents"
Case 8
C = C + "vuit-cents"
Case 9
C = C + "nou-cents"
End Select
'
'
'PREFIJO
C = C + " " 'espacio para las centenas
Select Case De_Mo
Case 1
If Un_Mo <> 0 Then
If De_Mo = 1 And Un_Mo = 1 Then C = C + "onze"
If De_Mo = 1 And Un_Mo = 2 Then C = C + "dotze"
If De_Mo = 1 And Un_Mo = 3 Then C = C + "tretze"
If De_Mo = 1 And Un_Mo = 4 Then C = C + "catorze"
If De_Mo = 1 And Un_Mo = 5 Then C = C + "quinze"
If De_Mo = 1 And Un_Mo > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un_Mo <> 0 Then
C = C + "vint"
Else
C = C + "vint-i-"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaratna"
Case 5
C = C + "cinquanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
'
'
'
If De_Mo = 1 And Un_Mo = 1 Then GoTo SaltaUnidades_Millon '11
If De_Mo = 1 And Un_Mo = 2 Then GoTo SaltaUnidades_Millon '12
If De_Mo = 1 And Un_Mo = 3 Then GoTo SaltaUnidades_Millon '13
If De_Mo = 1 And Un_Mo = 4 Then GoTo SaltaUnidades_Millon '14
If De_Mo = 1 And Un_Mo = 5 Then GoTo SaltaUnidades_Millon '15
'PREFIJOS
If (De_Mo > 2 And Un_Mo <> 0) Then C = C + "-"
If (De_Mo <= 2 And (Un_Mo <> 0 And De_Mo <> 0)) Then C = C + ""
'
Select Case Un_Mo
Case 1
C = C + "un"
If Ce_Mo = 0 And De_Mo = 0 Then C = C + " milió"
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "seis"
Case 7
C = C + "set"
Case 8
C = C + "vuit"
Case 9
C = C + "nou"
End Select
SaltaUnidades_Millon:
'
If NUM > 999999 Then
If Un_Mo = 1 And (De_Mo = 0 And Ce_Mo = 0 And Un_Ma_Mo = 0 And De_Ma_Mo = 0 And Ce_Ma_Mo = 0) Then 'solo 1 millon C = C + " millón"
Else
C = C + " milions"
End If
End If
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'
'PREFIJO
C = C + " " 'espacio para las unidades de millon
Select Case Ce_Ma
Case 1
If (Un_Ma = 0 And De_Ma = 0) Then
C = C + "cent mil"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents" + G + "" 'genero
Case 3
C = C + "tres-cents" + G + "" 'genero
Case 4
C = C + "quatre-cents" + G + "" 'genero
Case 5
C = C + "cinc-cents" + G + "" 'genero
Case 6
C = C + "sis-cents" + G + "" 'genero
Case 7
C = C + "set-cents" + G + "" 'genero
Case 8
C = C + "vuit-cents" + G + "" 'genero
Case 9
C = C + "nou-cents" + G + "" 'genero
End Select
If Ce_Ma > 1 And (De_Ma = 0 And Un_Ma = 0) Then
C = C + " mil"
End If
'
'
Select Case De_Ma
Case 1
If Un_Ma <> 0 Then
If De_Ma = 1 And Un_Ma = 1 Then C = C + " onze mil"
If De_Ma = 1 And Un_Ma = 2 Then C = C + " dotze mil"
If De_Ma = 1 And Un_Ma = 3 Then C = C + " tretze mil"
If De_Ma = 1 And Un_Ma = 4 Then C = C + " catorze mil"
If De_Ma = 1 And Un_Ma = 5 Then C = C + " quinze mil"
If De_Ma = 1 And Un_Ma > 5 Then C = C + " di"
Else
C = C + " deu mil"
End If
Case 2
If Un_Ma <> 0 Then
C = C + " vint-i-"
Else
C = C + " vint mil"
End If
Case 3
If Un_Ma <> 0 Then
C = C + " trenta"
Else
C = C + " trenta mil"
End If
Case 4
If Un_Ma <> 0 Then
C = C + " quaranta"
Else
C = C + " quaranta mil"
End If
Case 5
If Un_Ma <> 0 Then
C = C + " cincuanta"
Else
C = C + " cincuanta mil"
End If
Case 6
If Un_Ma <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 7
If Un_Ma <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 8
If Un_Ma <> 0 Then
C = C + " vuitanta"
Else
C = C + " vuitanta mil"
End If
Case 9
If Un_Ma <> 0 Then
C = C + " noranta"
Else
C = C + " noranta mil"
End If
End Select
'
'
'
If De_Ma = 1 And Un_Ma = 1 Then GoTo SaltaUnidades_Millar '11
If De_Ma = 1 And Un_Ma = 2 Then GoTo SaltaUnidades_Millar '12
If De_Ma = 1 And Un_Ma = 3 Then GoTo SaltaUnidades_Millar '13
If De_Ma = 1 And Un_Ma = 4 Then GoTo SaltaUnidades_Millar '14
If De_Ma = 1 And Un_Ma = 5 Then GoTo SaltaUnidades_Millar '15
'PREFIJOS
If (De_Ma > 2 And Un_Ma <> 0) Then C = C + "-"
If (De_Ma <= 2 And (Un_Ma <> 0 And De_Ma <> 0)) Then C = C + ""
'
Select Case Un_Ma
Case 1
If (De_Ma = 0 And Ce_Ma = 0) Then
C = C + " mil"
Else
If G = "o" Then
C = C + "un mil"
Else
C = C + "unamil"
End If
End If
Case 2
C = C + "dos mil"
Case 3
C = C + "tres mil"
Case 4
C = C + "quatre mil"
Case 5
C = C + "cinc mil"
Case 6
C = C + "sis mil"
Case 7
C = C + "set mil"
Case 8
C = C + "vuit mil"
Case 9
C = C + "nou mil"
End Select
SaltaUnidades_Millar:
'
'
'PREFIJO
C = C + " " 'espacio para las unidades de millar
Select Case Ce
Case 1
If (Un = 0 And De = 0) Then
C = C + "cent"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents" + G + "" 'genero
Case 3
C = C + "tres-cents" + G + "" 'genero
Case 4
C = C + "quatre-cents" + G + "" 'genero
Case 5
C = C + "cinc-cents" + G + "" 'genero
Case 6
C = C + "sis-cents" + G + "" 'genero
Case 7
C = C + "set-cents" + G + "" 'genero
Case 8
C = C + "vuit-cents" + G + "" 'genero
Case 9
C = C + "nou-cents" + G + "" 'genero
End Select
'
'
'PREFIJO
C = C + " " 'espacio para las centenas
Select Case De
Case 1
If Un <> 0 Then
If De = 1 And Un = 1 Then C = C + "once"
If De = 1 And Un = 2 Then C = C + "dotze"
If De = 1 And Un = 3 Then C = C + "tretze"
If De = 1 And Un = 4 Then C = C + "catorze"
If De = 1 And Un = 5 Then C = C + "quinze"
If De = 1 And Un > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un <> 0 Then
C = C + "vint-i-"
Else
C = C + "vint"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaranta"
Case 5
C = C + "cincuanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
'
'
'
If De = 1 And Un = 1 Then GoTo SaltaUnidades '11
If De = 1 And Un = 2 Then GoTo SaltaUnidades '12
If De = 1 And Un = 3 Then GoTo SaltaUnidades '13
If De = 1 And Un = 4 Then GoTo SaltaUnidades '14
If De = 1 And Un = 5 Then GoTo SaltaUnidades '15
'PREFIJOS
If (De > 2 And Un <> 0) Then C = C + "-"
If (De <= 2 And (Un <> 0 And De <> 0)) Then C = C + ""
'
Select Case Un
Case 1
If G <> "o" Then
C = C + "un" + G 'genero
Else
C = C + "un"
End If
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "sis"
Case 7
C = C + "set"
Case 8
C = C + "vuit"
Case 9
C = C + "nou"
End Select
SaltaUnidades:
'
'
'CERO
If CDbl(Ente) = 0 Then C = "zero"
'
'
If Bo_Deci = True Then GoSub DECIMALES_Sub
'
GoSub ELIMINAR_ESPACIOS
If Moneda_Programa = "Eur" Then
If Int(NUM) = NUM Then C = C + " euros" Else C = C + " cèntims"
Else
C = C + " Pts."
End If
C = LTrim(RTrim(C))
If C = "un euros" Then C = "un euro"
If C = "un céntimos" Then C = "un cèntim"
If Left(C + Space(Len("un euros")), Len("un euros")) = "un euros" Then
C = "un euro" + Right(C, Len(C) - Len("un euros"))
End If
If Right(Space(Len("uno céntimos")) + C, Len("uno céntimos")) = "un cèntims" Then
C = Left(C, Len(C) - Len("un cèntims")) + "un cèntims"
End If
If Right(Space(Len("amb un cèntims")) + C, Len("amb un cèntims")) = "amb un cèntims" Then
C = Left(C, Len(C) - Len("amb un cèntims")) + "amb un cèntims"
End If
CONVIERTEEUROSCAT = C
Exit Function
'######################################
'######### SUBRUTINAS ###############
'######################################
DECIMALES_Sub:
Dim Bo1 As Boolean 'salta centenas
Dim Bo2 As Boolean 'salda decenas
Bo1 = False
Bo2 = False
Deci = Left(Deci + "00", 2)
If Val(Deci) = 0 Then Return
If Len(Deci) = 1 Then Deci = Deci + "0"
If Val(Deci) > 0 Then Bo1 = True
'
Un_De = Mid(Deci + "00", 2, 1)
'
'
De_De = Left(Deci + "0", 1)
'
C = C + " euros amb "
'
If Bo2 = True Then GoTo SDecenas
Select Case De_De
Case 0
C = C + ""
Case 1
If Un_De <> 0 Then
If De_De = 1 And Un_De = 1 Then C = C + "onze"
If De_De = 1 And Un_De = 2 Then C = C + "dotze"
If De_De = 1 And Un_De = 3 Then C = C + "tretze"
If De_De = 1 And Un_De = 4 Then C = C + "catorze"
If De_De = 1 And Un_De = 5 Then C = C + "quinze"
If De_De = 1 And Un_De > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un_De <> 0 Then
C = C + "vint-i-"
Else
C = C + "vint"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaranta"
Case 5
C = C + "cincuanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
SDecenas:
'
'
'
If De_De = 1 And Un_De = 1 Then GoTo SaltaUnidades_Decimal '11
If De_De = 1 And Un_De = 2 Then GoTo SaltaUnidades_Decimal '12
If De_De = 1 And Un_De = 3 Then GoTo SaltaUnidades_Decimal '13
If De_De = 1 And Un_De = 4 Then GoTo SaltaUnidades_Decimal '14
If De_De = 1 And Un_De = 5 Then GoTo SaltaUnidades_Decimal '15
'PREFIJOS
If (De_De > 2 And Un_De <> 0) Then C = C + "-"
If (De_De <= 2 And (Un_De <> 0 And De_De <> 0)) Then C = C + ""
'
Select Case Un_De
Case 1
C = C + "un" + G 'genero
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "sis"
Case 7
C = C + "set"
Case 8
C = C + "vui"
Case 9
C = C + "nou"
End Select
SaltaUnidades_Decimal:
'
Return
ELIMINAR_ESPACIOS:
D = ""
E = ""
For F = 1 To Len(C)
D = Mid(C, F, 1)
BO = False
If (Ant_D = " " And D = " ") Then D = "": BO = True
If BO = False Then Ant_D = D
E = E + D
Next F
C = E
Return
End Function
Dim C As String: C = ""
Dim A As Double
Dim Un As Byte
Dim De As Byte
Dim Ce As Byte
Dim Un_Ma As Byte
Dim De_Ma As Byte
Dim Ce_Ma As Byte
Dim Un_Mo As Byte
Dim De_Mo As Byte
Dim Ce_Mo As Byte
Dim Un_Ma_Mo As Byte
Dim De_Ma_Mo As Byte
Dim Ce_Ma_Mo As Byte
Dim G As String 'genero.
Dim A2 As String
Dim F As Double
Dim D As String
Dim BO As Boolean
Dim Deci As String
Dim Ente As String
Dim Bo_Deci As Boolean
Dim AD As Double
Dim Un_De As Byte
Dim De_De As Byte
Dim Ce_De As Byte
Dim E As String
Dim Ant_D As String
Rem adaptación del programa a un entorno externo
Dim Moneda_Programa As String 'Eur/Pts
Moneda_Programa = "Eur"
Rem adaptación del programa a un entorno externo
NUM = CONTROL_CDEC(NUM)
Select Case Moneda_Programa
Case "Pts"
G = "a"
NUM = Round(NUM)
Case "Eur"
G = ""
End Select
A2 = CStr(NUM)
Ente = ""
Deci = ""
BO = False
Bo_Deci = False
For F = 1 To Len(A2)
D = Mid(A2, F, 1)
If D = "." Then D = ","
If D = "," Then BO = True: D = "": Bo_Deci = True
Select Case BO
Case False
Ente = Ente + D
Case True
Deci = Deci + D
End Select
Next F
If Len(Deci) > 3 Then Deci = Left(LTrim(Deci), 3)
A = CDbl(Ente)
If Bo_Deci = True Then AD = CDbl(Deci)
If A > 999999999999# Then CONVIERTEEUROSCAT = CStr(NUM): Exit Function
'
Un = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Ma = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
'
Un_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
De_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
'
Ce_Ma_Mo = Right("0" + CStr(A), 1)
A = Int(A / 10)
'
C = ""
'
Select Case Ce_Ma_Mo
Case 1
If (Un_Ma_Mo = 0 And De_Ma_Mo = 0) Then
C = C + "cent mil"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents"
Case 3
C = C + "tres-cents"
Case 4
C = C + "quatre-cents"
Case 5
C = C + "cinc-cents"
Case 6
C = C + "sis-cents"
Case 7
C = C + "set-cents"
Case 8
C = C + "vuit-cents"
Case 9
C = C + "nou-cents"
End Select
If Ce_Ma_Mo > 1 And (De_Ma_Mo = 0 And Un_Ma_Mo = 0) Then
C = C + " mil"
End If
'
'
Select Case De_Ma_Mo
Case 1
If Un_Ma_Mo <> 0 Then
If De_Ma_Mo = 1 And Un_Ma_Mo = 1 Then C = C + " once mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 2 Then C = C + " dotze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 3 Then C = C + " tretze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 4 Then C = C + " catorze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo = 5 Then C = C + " quinze mil"
If De_Ma_Mo = 1 And Un_Ma_Mo > 5 Then C = C + " di"
Else
C = C + " deu mil"
End If
Case 2
If Un_Ma_Mo <> 0 Then
C = C + " vint-i-"
Else
C = C + " vint mil"
End If
Case 3
If Un_Ma_Mo <> 0 Then
C = C + " trenta"
Else
C = C + " trenta mil"
End If
Case 4
If Un_Ma_Mo <> 0 Then
C = C + " quaranta"
Else
C = C + " quaranta mil"
End If
Case 5
If Un_Ma_Mo <> 0 Then
C = C + " cincuanta"
Else
C = C + " cincuanta mil"
End If
Case 6
If Un_Ma_Mo <> 0 Then
C = C + " seixanta"
Else
C = C + " seixanta mil"
End If
Case 7
If Un_Ma_Mo <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 8
If Un_Ma_Mo <> 0 Then
C = C + " vuitanta"
Else
C = C + " vuitanta mil"
End If
Case 9
If Un_Ma_Mo <> 0 Then
C = C + " noranta"
Else
C = C + " noranta mil"
End If
End Select
'
'
'
If De_Ma_Mo = 1 And Un_Ma_Mo = 1 Then GoTo SaltaUnidades_Millar_Millon '11
If De_Ma_Mo = 1 And Un_Ma_Mo = 2 Then GoTo SaltaUnidades_Millar_Millon '12
If De_Ma_Mo = 1 And Un_Ma_Mo = 3 Then GoTo SaltaUnidades_Millar_Millon '13
If De_Ma_Mo = 1 And Un_Ma_Mo = 4 Then GoTo SaltaUnidades_Millar_Millon '14
If De_Ma_Mo = 1 And Un_Ma_Mo = 5 Then GoTo SaltaUnidades_Millar_Millon '15
'PREFIJOS
If (De_Ma_Mo > 2 And Un_Ma_Mo <> 0) Then C = C + "-"
If (De_Ma_Mo <= 2 And (Un_Ma_Mo <> 0 And De_Ma_Mo <> 0)) Then C = C + ""
'
Select Case Un_Ma_Mo
Case 1
If (De_Ma_Mo = 0 And Ce_Ma_Mo = 0) Then
C = C + " mil"
Else
C = C + "un mil"
End If
Case 2
C = C + "dos mil"
Case 3
C = C + "tres mil"
Case 4
C = C + "quatre mil"
Case 5
C = C + "cinc mil"
Case 6
C = C + "sis mil"
Case 7
C = C + "set mil"
Case 8
C = C + "vuit mil"
Case 9
C = C + "nou mil"
End Select
SaltaUnidades_Millar_Millon:
'
'
'PREFIJO
C = C + " " 'espacio para las unidades de millar de millon
Select Case Ce_Mo
Case 1
If (Un_Mo = 0 And De_Mo = 0) Then
C = C + "cent"
Else
C = C + "cent "
End If
Case 2
C = C + "dos-cents"
Case 3
C = C + "tres-cents"
Case 4
C = C + "quatre-cents"
Case 5
C = C + "cinc-cents"
Case 6
C = C + "sis-cents"
Case 7
C = C + "set-cents"
Case 8
C = C + "vuit-cents"
Case 9
C = C + "nou-cents"
End Select
'
'
'PREFIJO
C = C + " " 'espacio para las centenas
Select Case De_Mo
Case 1
If Un_Mo <> 0 Then
If De_Mo = 1 And Un_Mo = 1 Then C = C + "onze"
If De_Mo = 1 And Un_Mo = 2 Then C = C + "dotze"
If De_Mo = 1 And Un_Mo = 3 Then C = C + "tretze"
If De_Mo = 1 And Un_Mo = 4 Then C = C + "catorze"
If De_Mo = 1 And Un_Mo = 5 Then C = C + "quinze"
If De_Mo = 1 And Un_Mo > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un_Mo <> 0 Then
C = C + "vint"
Else
C = C + "vint-i-"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaratna"
Case 5
C = C + "cinquanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
'
'
'
If De_Mo = 1 And Un_Mo = 1 Then GoTo SaltaUnidades_Millon '11
If De_Mo = 1 And Un_Mo = 2 Then GoTo SaltaUnidades_Millon '12
If De_Mo = 1 And Un_Mo = 3 Then GoTo SaltaUnidades_Millon '13
If De_Mo = 1 And Un_Mo = 4 Then GoTo SaltaUnidades_Millon '14
If De_Mo = 1 And Un_Mo = 5 Then GoTo SaltaUnidades_Millon '15
'PREFIJOS
If (De_Mo > 2 And Un_Mo <> 0) Then C = C + "-"
If (De_Mo <= 2 And (Un_Mo <> 0 And De_Mo <> 0)) Then C = C + ""
'
Select Case Un_Mo
Case 1
C = C + "un"
If Ce_Mo = 0 And De_Mo = 0 Then C = C + " milió"
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "seis"
Case 7
C = C + "set"
Case 8
C = C + "vuit"
Case 9
C = C + "nou"
End Select
SaltaUnidades_Millon:
'
If NUM > 999999 Then
If Un_Mo = 1 And (De_Mo = 0 And Ce_Mo = 0 And Un_Ma_Mo = 0 And De_Ma_Mo = 0 And Ce_Ma_Mo = 0) Then 'solo 1 millon C = C + " millón"
Else
C = C + " milions"
End If
End If
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'
'PREFIJO
C = C + " " 'espacio para las unidades de millon
Select Case Ce_Ma
Case 1
If (Un_Ma = 0 And De_Ma = 0) Then
C = C + "cent mil"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents" + G + "" 'genero
Case 3
C = C + "tres-cents" + G + "" 'genero
Case 4
C = C + "quatre-cents" + G + "" 'genero
Case 5
C = C + "cinc-cents" + G + "" 'genero
Case 6
C = C + "sis-cents" + G + "" 'genero
Case 7
C = C + "set-cents" + G + "" 'genero
Case 8
C = C + "vuit-cents" + G + "" 'genero
Case 9
C = C + "nou-cents" + G + "" 'genero
End Select
If Ce_Ma > 1 And (De_Ma = 0 And Un_Ma = 0) Then
C = C + " mil"
End If
'
'
Select Case De_Ma
Case 1
If Un_Ma <> 0 Then
If De_Ma = 1 And Un_Ma = 1 Then C = C + " onze mil"
If De_Ma = 1 And Un_Ma = 2 Then C = C + " dotze mil"
If De_Ma = 1 And Un_Ma = 3 Then C = C + " tretze mil"
If De_Ma = 1 And Un_Ma = 4 Then C = C + " catorze mil"
If De_Ma = 1 And Un_Ma = 5 Then C = C + " quinze mil"
If De_Ma = 1 And Un_Ma > 5 Then C = C + " di"
Else
C = C + " deu mil"
End If
Case 2
If Un_Ma <> 0 Then
C = C + " vint-i-"
Else
C = C + " vint mil"
End If
Case 3
If Un_Ma <> 0 Then
C = C + " trenta"
Else
C = C + " trenta mil"
End If
Case 4
If Un_Ma <> 0 Then
C = C + " quaranta"
Else
C = C + " quaranta mil"
End If
Case 5
If Un_Ma <> 0 Then
C = C + " cincuanta"
Else
C = C + " cincuanta mil"
End If
Case 6
If Un_Ma <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 7
If Un_Ma <> 0 Then
C = C + " setanta"
Else
C = C + " setanta mil"
End If
Case 8
If Un_Ma <> 0 Then
C = C + " vuitanta"
Else
C = C + " vuitanta mil"
End If
Case 9
If Un_Ma <> 0 Then
C = C + " noranta"
Else
C = C + " noranta mil"
End If
End Select
'
'
'
If De_Ma = 1 And Un_Ma = 1 Then GoTo SaltaUnidades_Millar '11
If De_Ma = 1 And Un_Ma = 2 Then GoTo SaltaUnidades_Millar '12
If De_Ma = 1 And Un_Ma = 3 Then GoTo SaltaUnidades_Millar '13
If De_Ma = 1 And Un_Ma = 4 Then GoTo SaltaUnidades_Millar '14
If De_Ma = 1 And Un_Ma = 5 Then GoTo SaltaUnidades_Millar '15
'PREFIJOS
If (De_Ma > 2 And Un_Ma <> 0) Then C = C + "-"
If (De_Ma <= 2 And (Un_Ma <> 0 And De_Ma <> 0)) Then C = C + ""
'
Select Case Un_Ma
Case 1
If (De_Ma = 0 And Ce_Ma = 0) Then
C = C + " mil"
Else
If G = "o" Then
C = C + "un mil"
Else
C = C + "unamil"
End If
End If
Case 2
C = C + "dos mil"
Case 3
C = C + "tres mil"
Case 4
C = C + "quatre mil"
Case 5
C = C + "cinc mil"
Case 6
C = C + "sis mil"
Case 7
C = C + "set mil"
Case 8
C = C + "vuit mil"
Case 9
C = C + "nou mil"
End Select
SaltaUnidades_Millar:
'
'
'PREFIJO
C = C + " " 'espacio para las unidades de millar
Select Case Ce
Case 1
If (Un = 0 And De = 0) Then
C = C + "cent"
Else
C = C + "cent"
End If
Case 2
C = C + "dos-cents" + G + "" 'genero
Case 3
C = C + "tres-cents" + G + "" 'genero
Case 4
C = C + "quatre-cents" + G + "" 'genero
Case 5
C = C + "cinc-cents" + G + "" 'genero
Case 6
C = C + "sis-cents" + G + "" 'genero
Case 7
C = C + "set-cents" + G + "" 'genero
Case 8
C = C + "vuit-cents" + G + "" 'genero
Case 9
C = C + "nou-cents" + G + "" 'genero
End Select
'
'
'PREFIJO
C = C + " " 'espacio para las centenas
Select Case De
Case 1
If Un <> 0 Then
If De = 1 And Un = 1 Then C = C + "once"
If De = 1 And Un = 2 Then C = C + "dotze"
If De = 1 And Un = 3 Then C = C + "tretze"
If De = 1 And Un = 4 Then C = C + "catorze"
If De = 1 And Un = 5 Then C = C + "quinze"
If De = 1 And Un > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un <> 0 Then
C = C + "vint-i-"
Else
C = C + "vint"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaranta"
Case 5
C = C + "cincuanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
'
'
'
If De = 1 And Un = 1 Then GoTo SaltaUnidades '11
If De = 1 And Un = 2 Then GoTo SaltaUnidades '12
If De = 1 And Un = 3 Then GoTo SaltaUnidades '13
If De = 1 And Un = 4 Then GoTo SaltaUnidades '14
If De = 1 And Un = 5 Then GoTo SaltaUnidades '15
'PREFIJOS
If (De > 2 And Un <> 0) Then C = C + "-"
If (De <= 2 And (Un <> 0 And De <> 0)) Then C = C + ""
'
Select Case Un
Case 1
If G <> "o" Then
C = C + "un" + G 'genero
Else
C = C + "un"
End If
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "sis"
Case 7
C = C + "set"
Case 8
C = C + "vuit"
Case 9
C = C + "nou"
End Select
SaltaUnidades:
'
'
'CERO
If CDbl(Ente) = 0 Then C = "zero"
'
'
If Bo_Deci = True Then GoSub DECIMALES_Sub
'
GoSub ELIMINAR_ESPACIOS
If Moneda_Programa = "Eur" Then
If Int(NUM) = NUM Then C = C + " euros" Else C = C + " cèntims"
Else
C = C + " Pts."
End If
C = LTrim(RTrim(C))
If C = "un euros" Then C = "un euro"
If C = "un céntimos" Then C = "un cèntim"
If Left(C + Space(Len("un euros")), Len("un euros")) = "un euros" Then
C = "un euro" + Right(C, Len(C) - Len("un euros"))
End If
If Right(Space(Len("uno céntimos")) + C, Len("uno céntimos")) = "un cèntims" Then
C = Left(C, Len(C) - Len("un cèntims")) + "un cèntims"
End If
If Right(Space(Len("amb un cèntims")) + C, Len("amb un cèntims")) = "amb un cèntims" Then
C = Left(C, Len(C) - Len("amb un cèntims")) + "amb un cèntims"
End If
CONVIERTEEUROSCAT = C
Exit Function
'######################################
'######### SUBRUTINAS ###############
'######################################
DECIMALES_Sub:
Dim Bo1 As Boolean 'salta centenas
Dim Bo2 As Boolean 'salda decenas
Bo1 = False
Bo2 = False
Deci = Left(Deci + "00", 2)
If Val(Deci) = 0 Then Return
If Len(Deci) = 1 Then Deci = Deci + "0"
If Val(Deci) > 0 Then Bo1 = True
'
Un_De = Mid(Deci + "00", 2, 1)
'
'
De_De = Left(Deci + "0", 1)
'
C = C + " euros amb "
'
If Bo2 = True Then GoTo SDecenas
Select Case De_De
Case 0
C = C + ""
Case 1
If Un_De <> 0 Then
If De_De = 1 And Un_De = 1 Then C = C + "onze"
If De_De = 1 And Un_De = 2 Then C = C + "dotze"
If De_De = 1 And Un_De = 3 Then C = C + "tretze"
If De_De = 1 And Un_De = 4 Then C = C + "catorze"
If De_De = 1 And Un_De = 5 Then C = C + "quinze"
If De_De = 1 And Un_De > 5 Then C = C + "di"
Else
C = C + "deu"
End If
Case 2
If Un_De <> 0 Then
C = C + "vint-i-"
Else
C = C + "vint"
End If
Case 3
C = C + "trenta"
Case 4
C = C + "quaranta"
Case 5
C = C + "cincuanta"
Case 6
C = C + "seixanta"
Case 7
C = C + "setanta"
Case 8
C = C + "vuitanta"
Case 9
C = C + "noranta"
End Select
SDecenas:
'
'
'
If De_De = 1 And Un_De = 1 Then GoTo SaltaUnidades_Decimal '11
If De_De = 1 And Un_De = 2 Then GoTo SaltaUnidades_Decimal '12
If De_De = 1 And Un_De = 3 Then GoTo SaltaUnidades_Decimal '13
If De_De = 1 And Un_De = 4 Then GoTo SaltaUnidades_Decimal '14
If De_De = 1 And Un_De = 5 Then GoTo SaltaUnidades_Decimal '15
'PREFIJOS
If (De_De > 2 And Un_De <> 0) Then C = C + "-"
If (De_De <= 2 And (Un_De <> 0 And De_De <> 0)) Then C = C + ""
'
Select Case Un_De
Case 1
C = C + "un" + G 'genero
Case 2
C = C + "dos"
Case 3
C = C + "tres"
Case 4
C = C + "quatre"
Case 5
C = C + "cinc"
Case 6
C = C + "sis"
Case 7
C = C + "set"
Case 8
C = C + "vui"
Case 9
C = C + "nou"
End Select
SaltaUnidades_Decimal:
'
Return
ELIMINAR_ESPACIOS:
D = ""
E = ""
For F = 1 To Len(C)
D = Mid(C, F, 1)
BO = False
If (Ant_D = " " And D = " ") Then D = "": BO = True
If BO = False Then Ant_D = D
E = E + D
Next F
C = E
Return
End Function
Private Function CONTROL_CDEC(ByVal NUM As Variant) As Variant
On Error GoTo TRATAMIENTO
GoTo INICIO
TRATAMIENTO:
CONTROL_CDEC = 0
Exit Function
INICIO:
CONTROL_CDEC = CDec(NUM)
End Function



Comentaris
Publica un comentari a l'entrada