USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (Datas/Números/Strings)

Título da Dica:  Numeros Por Extenso
Postada em 12/8/2004 por Barto            
Function Extenso(nValor) As String
  'Faz a validação do argumento
  If IsNull(nValor) Or nValor <= 0 Or nValor > 9999999.99 Then
    Exit Function
  End If
  'Declara as variáveis da função
  Dim nContador, nTamanho As Integer
  Dim cValor, cParte, cFinal As String
  ReDim aGrupo(4), aTexto(4) As String
  'Define matrizes com extensos parciais
  ReDim aUnid(19) As String
  aUnid(1) = "UM ": aUnid(2) = "DOIS ": aUnid(3) = "TRES "
  aUnid(4) = "QUATRO ": aUnid(5) = "CINCO ": aUnid(6) = "SEIS "
  aUnid(7) = "SETE ": aUnid(8) = "OITO ": aUnid(9) = "NOVE "
  aUnid(10) = "DEZ ": aUnid(11) = "ONZE ": aUnid(12) = "DOZE "
  aUnid(13) = "TREZE ": aUnid(14) = "QUATORZE ": aUnid(15) = "QUINZE "
  aUnid(16) = "DEZESSEIS ": aUnid(17) = "DEZESSETE ": aUnid(18) = "DEZOITO "
  aUnid(19) = "DEZENOVE "
  ReDim aDezena(9) As String
  aDezena(1) = "DEZ ": aDezena(2) = "VINTE ": aDezena(3) = "TRINTA "
  aDezena(4) = "QUARENTA ": aDezena(5) = "CINQUENTA "
  aDezena(6) = "SESSENTA ": aDezena(7) = "SETENTA ": aDezena(8) = "OITENTA "
  aDezena(9) = "NOVENTA "
  ReDim aCentena(9) As String
  aCentena(1) = "CENTO ":  aCentena(2) = "DUZENTOS "
  aCentena(3) = "TREZENTOS ": aCentena(4) = "QUATROCENTOS "
  aCentena(5) = "QUINHENTOS ": aCentena(6) = "SEISCENTOS "
  aCentena(7) = "SETECENTOS ": aCentena(8) = "OITOCENTOS "
  aCentena(9) = "NOVECENTOS "
  'Divide o valor em vários grupos
  cValor = Format$(nValor, "0000000000.00")
  aGrupo(1) = Mid$(cValor, 2, 3)
  aGrupo(2) = Mid$(cValor, 5, 3)
  aGrupo(3) = Mid$(cValor, 8, 3)
  aGrupo(4) = "0" + Mid$(cValor, 12, 2)
  'Processa cada grupo
  For nContador = 1 To 4
    cParte = aGrupo(nContador)
    nTamanho = Switch(Val(cParte) < 10, 1, Val(cParte) < 100, 2, Val(cParte) < 1000, 3)
    If nTamanho = 3 Then
      If Right$(cParte, 2) <> "00" Then
        aTexto(nContador) = aTexto(nContador) + aCentena(Left(cParte, 1)) + "E "
        nTamanho = 2
      Else
        aTexto(nContador) = aTexto(nContador) + IIf(Left$(cParte, 1) = "1", "CEM ", aCentena(Left(cParte, 1)))
      End If
    End If
    If nTamanho = 2 Then
      If Val(Right(cParte, 2)) < 20 Then
        aTexto(nContador) = aTexto(nContador) + aUnid(Right(cParte, 2))
      Else
        aTexto(nContador) = aTexto(nContador) + aDezena(Mid(cParte, 2, 1))
        If Right$(cParte, 1) <> "0" Then
          aTexto(nContador) = aTexto(nContador) + "E "
          nTamanho = 1
        End If
      End If
    End If
    If nTamanho = 1 Then
      aTexto(nContador) = aTexto(nContador) + aUnid(Right(cParte, 1))
    End If
  Next
  'Gera o formato final do texto
  If Val(aGrupo(1) + aGrupo(2) + aGrupo(3)) = 0 And Val(aGrupo(4)) <> 0 Then
    cFinal = aTexto(4) + IIf(Val(aGrupo(4)) = 1, "CENTAVO", "CENTAVOS")
  Else
    cFinal = ""
    cFinal = cFinal + IIf(Val(aGrupo(1)) <> 0, aTexto(1) + IIf(Val(aGrupo(1)) > 1, "MILHÕES ", "MILHÃO "), "")
    If Val(aGrupo(2) + aGrupo(3)) = 0 Then
      cFinal = cFinal + "DE "
    Else
      cFinal = cFinal + IIf(Val(aGrupo(2)) <> 0, aTexto(2) + "MIL ", "")
    End If
    cFinal = cFinal + aTexto(3) + IIf(Val(aGrupo(1) + aGrupo(2) + aGrupo(3)) = 1, "REAL ", "REAIS ")
    cFinal = cFinal + IIf(Val(aGrupo(4)) <> 0, "E " + aTexto(4) + IIf(Val(aGrupo(4)) = 1, "CENTAVO", "CENTAVOS"), "")
  End If
  Extenso = cFinal
End Function
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página