[OFF] NUMEROS POR EXTENSO
Alguém conhece ou sabe onde encontrar as regras [Ô]oficiais[Ô] para se escrever numeros por extenso?
Bom amigo, pode dar uma olhada num artigo que postei.
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=8914
Boa sorte.
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=8914
Boa sorte.
Citação::
Bom amigo, pode dar uma olhada num artigo que postei.
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=8914
Boa sorte.
Eu vi e notei que tem alguns erros.
Cao marcos, será mais facil informar onde ocorreram os erros, para melhorar:
Num form nomeie um Text para [Ô]Valor[Ô] e outro para [Ô]Extenso[Ô] e cole no Form:
[txt-color=#e80000]Private Sub Form_Load()
[Valor] = 470.38
[Extenso] = ValoresExtenço([Valor], [Ô]Reais[Ô], 2)
End Sub
Private Sub Valor_Change()
If [Valor] <> [Ô][Ô] Then
[Extenso] = ValoresExtenço([Valor], [Ô]Reais[Ô], 2)
End If
End Sub[/txt-color]
No módulo copie e cole:
[txt-color=#e80000]
Function VECentenas(VEValor As Currency) As String
Dim Cem(1 To 9) As String
Dim Dez(1 To 10) As String
Dim Uni(1 To 19) As String
Dim VEExiste As Boolean
Dim VEExtenço As String
Dim VEValor2 As Currency
Cem(1) = [Ô]Cento[Ô]
Cem(2) = [Ô]Duzentos[Ô]
Cem(3) = [Ô]Trezentos[Ô]
Cem(4) = [Ô]Quatrocentos[Ô]
Cem(5) = [Ô]Quinhentos[Ô]
Cem(6) = [Ô]Seiscentos[Ô]
Cem(7) = [Ô]Setecentos[Ô]
Cem(8) = [Ô]Oitocentos[Ô]
Cem(9) = [Ô]Novecentos[Ô]
Dez(1) = [Ô]Dez[Ô]
Dez(2) = [Ô]Vinte[Ô]
Dez(3) = [Ô]Trinta[Ô]
Dez(4) = [Ô]Quarenta[Ô]
Dez(5) = [Ô]Cinquenta[Ô]
Dez(6) = [Ô]Sessenta[Ô]
Dez(7) = [Ô]Setenta[Ô]
Dez(8) = [Ô]Oitenta[Ô]
Dez(9) = [Ô]Noventa[Ô]
Dez(10) = [Ô][Ô]
Uni(1) = [Ô]Um[Ô]
Uni(2) = [Ô]Dois[Ô]
Uni(3) = [Ô]Tres[Ô]
Uni(4) = [Ô]Quatro[Ô]
Uni(5) = [Ô]Cinco[Ô]
Uni(6) = [Ô]Seis[Ô]
Uni(7) = [Ô]Sete[Ô]
Uni(8) = [Ô]Oito[Ô]
Uni(9) = [Ô]Nove[Ô]
Uni(10) = [Ô]Dez[Ô]
Uni(11) = [Ô]Onze[Ô]
Uni(12) = [Ô]Doze[Ô]
Uni(13) = [Ô]Treze[Ô]
Uni(14) = [Ô]Quatorze[Ô]
Uni(15) = [Ô]Quinze[Ô]
Uni(16) = [Ô]Dezesseis[Ô]
Uni(17) = [Ô]Dezessete[Ô]
Uni(18) = [Ô]Dezoito[Ô]
Uni(19) = [Ô]Dezanove[Ô]
VEExiste = False
VEExtenço = [Ô][Ô]
If VEValor > 100 Then
VEValor2 = Int(VEValor / 100)
VEValor = VEValor - VEValor2 * 100
VEExtenço = Cem(VEValor2)
VEExiste = True
End If
If VEValor = 100 Then
VEExtenço = [Ô]Cem[Ô]
VEExiste = False
End If
If VEValor > 19 Then
VEValor2 = Int(VEValor / 10)
VEValor = VEValor - VEValor2 * 10
If VEExiste Then VEExtenço = VEExtenço & [Ô] e [Ô]
VEExtenço = VEExtenço & Dez(VEValor2)
VEExiste = True
End If
If VEValor < 20 And VEValor >= 0 Then
If VEExiste And VEValor > 0 Then VEExtenço = VEExtenço & [Ô] e [Ô]
If VEValor > 0 Then VEExtenço = VEExtenço & Uni(VEValor)
End If
VECentenas = VEExtenço
End Function
Public Function ValoresExtenço(Valor As Currency, NomeMoeda As String, CasasDécimais As Byte) As String
Dim Centavo As Currency
Dim Milhão As Currency
Dim Milhar As Currency
Dim Unidade As Currency
Dim Existe As Boolean
Dim Extenço As String
Dim CD(0 To 6) As Long
CD(0) = 0
CD(1) = 10
CD(2) = 100
CD(3) = 1000
CD(4) = 10000
CD(5) = 100000
CD(6) = 1000000
If Valor = 0 Then
ValoresExtenço = [Ô]Zero [Ô] & NomeMoeda
Exit Function
End If
Valor = Abs(Valor)
[ô]Centavo = Int((Valor - Fix(Valor)) * 100)
Centavo = (Valor - Fix(Valor)) * CD(CasasDécimais)
Milhão = Int(Valor / 1000000)
Valor = Valor - Milhão * 1000000
Milhar = Int((Valor) / 1000)
Valor = Valor - Milhar * 1000
Unidade = Int(Valor)
Existe = False
If Milhão > 0 Then
If Milhão = 1 Then Extenço = [Ô]Um Milhão [Ô] Else Extenço = VECentenas(Milhão) + [Ô] Milhões [Ô]
Existe = True
End If
If Milhar > 0 Then
If Existe And Unidade = 0 Then Extenço = Extenço & [Ô]e [Ô]
If Milhar = 1 Then
Extenço = Extenço & [Ô]Mil [Ô]
ElseIf Milhar > 1 Then
Extenço = Extenço & VECentenas(Milhar) & [Ô] Mil [Ô]
End If
Existe = True
End If
If Unidade > 0 Then
If Existe And Int(Unidade / 100) = Unidade / 100 Then Extenço = Extenço & [Ô]e [Ô]
Extenço = Extenço & VECentenas(Unidade) & [Ô] [Ô]
End If
If Extenço = [Ô]Um Milhão[Ô] Then Extenço = Extenço & [Ô]de[Ô]
Extenço = Trim(Extenço) & [Ô] [Ô] & NomeMoeda
If Centavo > 0 Then
Extenço = Extenço & [Ô] e [Ô] & VECentenas(Centavo) + [Ô] Centavos.[Ô]
Else
Extenço = Extenço & [Ô].[Ô]
End If
ValoresExtenço = Extenço
End Function[/txt-color]
Num form nomeie um Text para [Ô]Valor[Ô] e outro para [Ô]Extenso[Ô] e cole no Form:
[txt-color=#e80000]Private Sub Form_Load()
[Valor] = 470.38
[Extenso] = ValoresExtenço([Valor], [Ô]Reais[Ô], 2)
End Sub
Private Sub Valor_Change()
If [Valor] <> [Ô][Ô] Then
[Extenso] = ValoresExtenço([Valor], [Ô]Reais[Ô], 2)
End If
End Sub[/txt-color]
No módulo copie e cole:
[txt-color=#e80000]
Function VECentenas(VEValor As Currency) As String
Dim Cem(1 To 9) As String
Dim Dez(1 To 10) As String
Dim Uni(1 To 19) As String
Dim VEExiste As Boolean
Dim VEExtenço As String
Dim VEValor2 As Currency
Cem(1) = [Ô]Cento[Ô]
Cem(2) = [Ô]Duzentos[Ô]
Cem(3) = [Ô]Trezentos[Ô]
Cem(4) = [Ô]Quatrocentos[Ô]
Cem(5) = [Ô]Quinhentos[Ô]
Cem(6) = [Ô]Seiscentos[Ô]
Cem(7) = [Ô]Setecentos[Ô]
Cem(8) = [Ô]Oitocentos[Ô]
Cem(9) = [Ô]Novecentos[Ô]
Dez(1) = [Ô]Dez[Ô]
Dez(2) = [Ô]Vinte[Ô]
Dez(3) = [Ô]Trinta[Ô]
Dez(4) = [Ô]Quarenta[Ô]
Dez(5) = [Ô]Cinquenta[Ô]
Dez(6) = [Ô]Sessenta[Ô]
Dez(7) = [Ô]Setenta[Ô]
Dez(8) = [Ô]Oitenta[Ô]
Dez(9) = [Ô]Noventa[Ô]
Dez(10) = [Ô][Ô]
Uni(1) = [Ô]Um[Ô]
Uni(2) = [Ô]Dois[Ô]
Uni(3) = [Ô]Tres[Ô]
Uni(4) = [Ô]Quatro[Ô]
Uni(5) = [Ô]Cinco[Ô]
Uni(6) = [Ô]Seis[Ô]
Uni(7) = [Ô]Sete[Ô]
Uni(8) = [Ô]Oito[Ô]
Uni(9) = [Ô]Nove[Ô]
Uni(10) = [Ô]Dez[Ô]
Uni(11) = [Ô]Onze[Ô]
Uni(12) = [Ô]Doze[Ô]
Uni(13) = [Ô]Treze[Ô]
Uni(14) = [Ô]Quatorze[Ô]
Uni(15) = [Ô]Quinze[Ô]
Uni(16) = [Ô]Dezesseis[Ô]
Uni(17) = [Ô]Dezessete[Ô]
Uni(18) = [Ô]Dezoito[Ô]
Uni(19) = [Ô]Dezanove[Ô]
VEExiste = False
VEExtenço = [Ô][Ô]
If VEValor > 100 Then
VEValor2 = Int(VEValor / 100)
VEValor = VEValor - VEValor2 * 100
VEExtenço = Cem(VEValor2)
VEExiste = True
End If
If VEValor = 100 Then
VEExtenço = [Ô]Cem[Ô]
VEExiste = False
End If
If VEValor > 19 Then
VEValor2 = Int(VEValor / 10)
VEValor = VEValor - VEValor2 * 10
If VEExiste Then VEExtenço = VEExtenço & [Ô] e [Ô]
VEExtenço = VEExtenço & Dez(VEValor2)
VEExiste = True
End If
If VEValor < 20 And VEValor >= 0 Then
If VEExiste And VEValor > 0 Then VEExtenço = VEExtenço & [Ô] e [Ô]
If VEValor > 0 Then VEExtenço = VEExtenço & Uni(VEValor)
End If
VECentenas = VEExtenço
End Function
Public Function ValoresExtenço(Valor As Currency, NomeMoeda As String, CasasDécimais As Byte) As String
Dim Centavo As Currency
Dim Milhão As Currency
Dim Milhar As Currency
Dim Unidade As Currency
Dim Existe As Boolean
Dim Extenço As String
Dim CD(0 To 6) As Long
CD(0) = 0
CD(1) = 10
CD(2) = 100
CD(3) = 1000
CD(4) = 10000
CD(5) = 100000
CD(6) = 1000000
If Valor = 0 Then
ValoresExtenço = [Ô]Zero [Ô] & NomeMoeda
Exit Function
End If
Valor = Abs(Valor)
[ô]Centavo = Int((Valor - Fix(Valor)) * 100)
Centavo = (Valor - Fix(Valor)) * CD(CasasDécimais)
Milhão = Int(Valor / 1000000)
Valor = Valor - Milhão * 1000000
Milhar = Int((Valor) / 1000)
Valor = Valor - Milhar * 1000
Unidade = Int(Valor)
Existe = False
If Milhão > 0 Then
If Milhão = 1 Then Extenço = [Ô]Um Milhão [Ô] Else Extenço = VECentenas(Milhão) + [Ô] Milhões [Ô]
Existe = True
End If
If Milhar > 0 Then
If Existe And Unidade = 0 Then Extenço = Extenço & [Ô]e [Ô]
If Milhar = 1 Then
Extenço = Extenço & [Ô]Mil [Ô]
ElseIf Milhar > 1 Then
Extenço = Extenço & VECentenas(Milhar) & [Ô] Mil [Ô]
End If
Existe = True
End If
If Unidade > 0 Then
If Existe And Int(Unidade / 100) = Unidade / 100 Then Extenço = Extenço & [Ô]e [Ô]
Extenço = Extenço & VECentenas(Unidade) & [Ô] [Ô]
End If
If Extenço = [Ô]Um Milhão[Ô] Then Extenço = Extenço & [Ô]de[Ô]
Extenço = Trim(Extenço) & [Ô] [Ô] & NomeMoeda
If Centavo > 0 Then
Extenço = Extenço & [Ô] e [Ô] & VECentenas(Centavo) + [Ô] Centavos.[Ô]
Else
Extenço = Extenço & [Ô].[Ô]
End If
ValoresExtenço = Extenço
End Function[/txt-color]
Então,
não há tratamento para a moeda, fica sempre fixo.
Ex:
um real, um milhão de reais
e tem um outro problema quando o valor fica abaixo de 1 real. Ex.: 0,50
não há tratamento para a moeda, fica sempre fixo.
Ex:
um real, um milhão de reais
e tem um outro problema quando o valor fica abaixo de 1 real. Ex.: 0,50
Tópico encerrado , respostas não são mais permitidas