MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Número por extenso em dias e não em reais

    Compartilhe

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 14:09

    Prezados Amigos:

    Preciso da ajuda dos nobres amigos.

    Quero que uma caixa de texto me retorne o valor por extenso de um determinado campo em dias e não em moeda (real).
    Ex.: 12 - retorne: 12 Dias e não 12 Reais.
    Alguém pode me ajudar?

    Atrefh
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 09/02/2017

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Atrefh em Ter 26 Dez 2017, 16:05

    pode se fazer essa gambiarra rsrs

    Código:

    Private Sub Texto0_Change()
    Texto2.Value = Texto0.Text + " Dias"
    End Sub

    Espero ter ajudado.

    Att.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5176
    Registrado : 15/03/2013

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  ahteixeira em Ter 26 Dez 2017, 17:47

    Olá a todos,

    Alexnilto, estou no tablet e adaptei do repositorio de exemplos, um código que faz valor para dias como pretende.

    Não testado

    Código:
    Option Compare Database
    Option Explicit

    Function ExtensoDias(nValor)
    'Autoria..: Eng. Cesar Costa e Dalicio Guiguer Filho
    'Linguagem: Access Basic
    'Data.....: Fevereiro/1994

    'Modificada: Wintceas Villaça Godois Jr.
    'Linguagem.: VBA
    'Data......: Outubro/1997

    'Modificada: César Rocha
    'Linguagem.: VBA
    'Data......: Novembro/1997

    'Modificada: Alvaro Teixeira
    'Linguagem.: VBA
    'Data......: Maio/2000 e Janeiro/2005 e Dezembro 2017


    'Faz a validação do argumento
      If IsNull(nValor) Or nValor <= 0 Or nValor > 999999999.99 Then
        Exit Function
      End If


    'Declara as variáveis da função
    Dim intContador As Integer
    Dim intTamanho As Integer
    Dim strValor As String
    Dim strParte As String
    Dim strFinal As String
    Dim strGrupo(4) As String
    Dim strTexto(4) As String

    'Define matrizes com extensos parciais
    Dim strUnid(19) As String
    strUnid(1) = "um ": strUnid(2) = "dois ": strUnid(3) = "três ": strUnid(4) = "quatro ": strUnid(5) = "cinco ": strUnid(6) = "seis ": strUnid(7) = "sete ": strUnid(8) = "oito ": strUnid(9) = "nove ": strUnid(10) = "dez ": strUnid(11) = "onze ": strUnid(12) = "doze ": strUnid(13) = "treze ": strUnid(14) = "catorze ": strUnid(15) = "quinze ": strUnid(16) = "dezasseis ": strUnid(17) = "dezassete ": strUnid(18) = "dezoito ": strUnid(19) = "dezanove "
    Dim strDezena(9) As String
    strDezena(1) = "dez ": strDezena(2) = "vinte ": strDezena(3) = "trinta ": strDezena(4) = "quarenta ": strDezena(5) = "cinquenta ": strDezena(6) = "sessenta ": strDezena(7) = "setenta ": strDezena(8) = "oitenta ": strDezena(9) = "noventa "
    Dim strCentena(9) As String
    strCentena(1) = "cento ": strCentena(2) = "duzentos ": strCentena(3) = "trezentos ": strCentena(4) = "quatrocentos ": strCentena(5) = "quinhentos ": strCentena(6) = "seiscentos ": strCentena(7) = "setecentos ": strCentena(8) = "oitocentos ": strCentena(9) = "novecentos "

    'Divide o valor em vários grupos
    strValor = Format$(nValor, "0000000000.00")
    strGrupo(1) = Mid$(strValor, 2, 3) 'Milhão
    strGrupo(2) = Mid$(strValor, 5, 3) 'Milhar
    strGrupo(3) = Mid$(strValor, 8, 3) 'Centena
    strGrupo(4) = "0" + Mid$(strValor, 12, 2) 'cêntimo

        'Processa cada grupo
        For intContador = 1 To 4
            strParte = strGrupo(intContador)
            
            intTamanho = Switch(Val(strParte) < 10, 1, Val(strParte) < 100, 2, Val(strParte) < 1000, 3)
            If intTamanho = 3 Then
                If Right$(strParte, 2) <> "00" Then
                    strTexto(intContador) = strTexto(intContador) + strCentena(Left(strParte, 1)) + "e "
                    intTamanho = 2
                Else
                    strTexto(intContador) = strTexto(intContador) + IIf(Left$(strParte, 1) = "1", "cem ", strCentena(Left(strParte, 1)))
                End If
            End If
            
            If intTamanho = 2 Then
                If Val(Right(strParte, 2)) < 20 Then
                    strTexto(intContador) = strTexto(intContador) + strUnid(Right(strParte, 2))
                Else
                    strTexto(intContador) = strTexto(intContador) + strDezena(Mid(strParte, 2, 1))
                    If Right$(strParte, 1) <> "0" Then
                    strTexto(intContador) = strTexto(intContador) + "e "
                    intTamanho = 1
                    End If
                End If
            End If
            If intTamanho = 1 Then
            
            'If Right$(strParte, 1) = "1" And intContador = "2" Then
            If Right$(strParte, 1) = "1" And intContador = "2" And nValor >= 1000 And nValor < 2000 Then
                    strTexto(intContador) = strTexto(intContador)
                Else
                    strTexto(intContador) = strTexto(intContador) + strUnid(Right(strParte, 1))
                End If
            End If
        Next intContador
        
        'Gera o formato final do texto
        If Val(strGrupo(1) + strGrupo(2) + strGrupo(3)) = 0 And Val(strGrupo(4)) <> 0 Then
            'strFinal = strTexto(4) + IIf(Val(strGrupo(4)) = 1, "cêntimo", "cêntimos")
        Else
            strFinal = ""
            If Val(strGrupo(2)) = 0 And Val(strGrupo(3)) = 0 And Val(strGrupo(4)) = 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões de ", "milhão de "), "")
            End If
            
            If Val(strGrupo(2)) <> 0 And Val(strGrupo(3)) = 0 And Val(strGrupo(4)) = 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões e ", "milhão e "), "")
            End If
            
            If Val(strGrupo(2)) = 0 And Val(strGrupo(3)) <> 0 And Val(strGrupo(4)) = 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões e ", "milhão e "), "")
            End If
            
            If Val(strGrupo(2)) <> 0 And Val(strGrupo(3)) <> 0 And Val(strGrupo(4)) = 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões, ", "milhão, "), "")
            End If
            
            If Val(strGrupo(2)) <> 0 And Val(strGrupo(3)) <> 0 And Val(strGrupo(4)) <> 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões, ", "milhão, "), "")
            End If
            
            If Val(strGrupo(2)) <> 0 And Val(strGrupo(3)) = 0 And Val(strGrupo(4)) <> 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões, ", "milhão, "), "")
            End If
            
            If Val(strGrupo(2)) = 0 And Val(strGrupo(3)) = 0 And Val(strGrupo(4)) <> 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões de ", "milhão de "), "")
            End If
            
            If Val(strGrupo(2)) = 0 And Val(strGrupo(3)) <> 0 And Val(strGrupo(4)) <> 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(1)) <> 0, strTexto(1) + IIf(Val(strGrupo(1)) > 1, "milhões, ", "milhão, "), "")
            End If
        
            If Val(strGrupo(3)) = 0 Then
                strFinal = strFinal + IIf(Val(strGrupo(2)) <> 0, strTexto(2) + "mil ", "")
            Else
                If Val(strGrupo(4)) = 0 Then
                    strFinal = strFinal + IIf(Val(strGrupo(2)) <> 0, strTexto(2) + "mil e ", "")
                Else
                    strFinal = strFinal + IIf(Val(strGrupo(2)) <> 0, strTexto(2) + "mil e ", "")
                End If
            End If
        
            If Val(strGrupo(4)) = 0 Then
                strFinal = strFinal + strTexto(3) + IIf(Val(strGrupo(1) + strGrupo(2) + strGrupo(3)) = 1, "dia", "dias")
            Else
                strFinal = strFinal + strTexto(3) + IIf(Val(strGrupo(3)) <> 1, IIf(Val(strGrupo(1) + strGrupo(2) + strGrupo(3)) = 1, "dia ", "dias "), "dias ")
            End If
            
            'strFinal = strFinal + IIf(Val(strGrupo(4)) <> 0, "e " + strTexto(4) + IIf(Val(strGrupo(4)) = 1, "cêntimo", "cêntimos"), "")
        End If

        ExtensoDias = UCase(Mid$(strFinal, 1, 1)) + Mid$(strFinal, 2)

    End Function

    Para chamar:
    =ExtensoDias([nomeCampoComNrDias])

    Abraço


    Última edição por ahteixeira em Ter 26 Dez 2017, 22:21, editado 1 vez(es)

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 18:04

    Infelizmente não.
    Usei a seguinte função =Extenso([CampoValorNumero]), e o resultado foi :

    CampoValorNumero= 12
    CampoValorExtenso= 12 reais

    O que quero é que no CampoValorExtenso o resultado seja 12 dias e não 12 reais)


    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 18:11

    ahteixeira, infelizmente não funcionou
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3420
    Registrado : 06/11/2009

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Assis em Ter 26 Dez 2017, 18:31

    alexnilto

    Quer postar a BD ou só essa parte ?

    Se sim, detalhes o formulário e a tabela.


    .................................................................................
    *** Só sei que nada sei ***

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 19:00

    Maximo Vip

    frmCadastro (quatro campos)

    nome (Campo tabela)
    promissoria (campo tabela)
    DiasAtraso (campo tabela)
    DiasAtrasoExtenso (caixa de texto) - nesta caixa de texto eu quero que apareça por extenso o valor do campo Dias Atraso. Eu usei a função(=Extenso([DiasAtraso]) só que o resultado foi o valor por extenso seguido da expressão reais (tipo doze reais), o que quero sem sem a expressão reais (tipo doze dias).
    Fico grato se puder me ajudar.
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3420
    Registrado : 06/11/2009

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Assis em Ter 26 Dez 2017, 19:17

    alexnilto

    Poste aqui só essa tabela e o frm cadastro.
    Esse "Extenso" deve ser de um módulo para converter valores de Reais para extenso.
    Aguardo


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3420
    Registrado : 06/11/2009

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Assis em Ter 26 Dez 2017, 20:01

    Teste


    .................................................................................
    *** Só sei que nada sei ***

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 20:07

    Assis
    é exatamente isso o que quero. Agora como você fez? Quero jogar no meu formulário exatamente isso.

    Muito legal

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 20:09

    Desculpe Assis.
    Não prestei atenção. Fiquei muito empolgado. kkkkk. Na realidade o 12 teria que ser em extenso e não em numeral.
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3420
    Registrado : 06/11/2009

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Assis em Ter 26 Dez 2017, 20:56

    Então assim ?


    .................................................................................
    *** Só sei que nada sei ***

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 21:42

    Assis.

    Muito obrigado meu caro. Você foi 10. Me ajudou bastante. Muito agradecido mesmo. Show de bola.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5176
    Registrado : 15/03/2013

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  ahteixeira em Ter 26 Dez 2017, 22:23

    Olá a todos,

    Alexnilto, que bom que conseguiu resolver com ajuda do colega Assis.

    Foi no metro, no tablet, não é fácil, ainda tinha uns erros que ajustei.
    No entanto não podia dar Reais, mas sim Euros, foi de onde copiei a função e alterei.

    Abraço


    Última edição por ahteixeira em Qua 27 Dez 2017, 09:26, editado 1 vez(es)
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3420
    Registrado : 06/11/2009

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  Assis em Ter 26 Dez 2017, 22:33

    Alexnilto Sousa

    Obrigado pelo retorno o fórum agradece.

    PS - Mas sabe uma coisa é muito + fácil trabalhar na tabela, e com o formulário de quem quer ajuda.

    mas como é altura de  santa  abri uma exceção


    .................................................................................
    *** Só sei que nada sei ***

    alexnilto
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 27/08/2016

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  alexnilto em Ter 26 Dez 2017, 22:57

    É só posso te agradecer e muito pela ajuda e por ter feito essa exceção. Valeu Capitão!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5176
    Registrado : 15/03/2013

    Re: [Resolvido]Número por extenso em dias e não em reais

    Mensagem  ahteixeira em Qua 27 Dez 2017, 09:51

    cheers

      Data/hora atual: Seg 18 Jun 2018, 16:08