none
Data errada do formulário para a planilha RRS feed

  • Pergunta

  • Olá pessoal, estou procurando aqui no fórum e em outros fóruns e não consegui resolver meu problema com data.

    Tenho um formulário onde eu digito uma data em um textbox. Essa data chamo de vencimento txtVencimento. Muito bem, antes de salvar a data na planilha faço uma verificação (pois se eu tiver parcelas, a partir da data de vencimento inicial, O PRÓXIMO vencimento caíra no mesmo dia do mês seguinte para a 2ª segunda parcela que fica assim

    SEQ  MATRICULA NOME                SÉRIE     PARCELA    VALOR      VENCIMENTO     PAGA       DATA PAGTO

    1       1000          JOÃO                 1ª           1/2             100,00     07/12/2014      n             

    2       1000          JOÃO                 1ª           2/2              100,00    07/01/2014      n

    E ao mandar esses dados para a plan1, a data quando é menor que 12 o dia fica assim 12/07/2014 e não consegui fazer com que fique 07/12/2014, e segui várias dicas e nada até pré=formatar a coluna da plan1 que vai receber a data e NADA.

    é feito um cálculo assim:

    Private Sub salvar()
    
    Dim lin As Long
    Dim myDate As Date
        
    myDate = txtVencimento
        
    lin = 2
        
    While Sheets("Cadastro").Cells(lin, 2) <> ""
        
        lin = lin + 1
        
    Wend
        
    'rotina para salvar
        
    For i = 0 To cboNumeroParcela.List(cboNumeroParcela.ListIndex) - 1
    
        ' Incrementar ID como índice da tabela
        Call numeracao
        
        Sheets("Cadastro").Cells(lin, 2) = txtCodigo.Text
            
        Sheets("Cadastro").Cells(lin, 3) = UCase(txtNome.Text)
            
        Sheets("Cadastro").Cells(lin, 4) = cboSerie.Text
            
        Sheets("Cadastro").Cells(lin, 5) = "'" & i + 1 & "/" & cboNumeroParcela.List(cboNumeroParcela.ListIndex)
            
        Sheets("Cadastro").Cells(lin, 6) = FormatNumber(cboValorParcela.Text, 2)
            
        
        If i <> 0 Then
            myDate = myDate + 30
        End If
            
            
        While Day(myDate) <> Day(txtVencimento)
                   
            If Day(myDate) > Day(txtVencimento) Then
            
                myDate = myDate - 1
            
            Else
            
                myDate = myDate + 1
                
            End If
                          
        Wend
                   
        Sheets("Cadastro").Cells(lin, 7) = myDate
            
        If txtPago = "" Then
            
            txtPago = "N"
            Sheets("Cadastro").Cells(lin, 8) = txtPago.Text
                
        Else
            
            Sheets("Cadastro").Cells(lin, 8) = UCase(txtPago.Text)
                
        End If
        
        Sheets("Cadastro").Cells(lin, 9) = txtDataPagto
            
        lin = lin + 1
            
    Next i
    
    Call novoaluno
    
    End Sub

    e se a data for com o dia maior que 12 daí sim grava certo, conforme imagem 1 e depois eu filtro em listbox e envio para duas planilhas e elas saem erradas também, mas no listbox saem certas. Como resolver isso?? 

    Obrigado e boa noite!!


    Carlos Rodrigues de Souza - Analista de Suporte


    • Editado Carosouza terça-feira, 9 de dezembro de 2014 04:24 Resolvido!!
    sábado, 6 de dezembro de 2014 03:57

Respostas

Todas as Respostas

  • Carosouza...

    altere esse trecho:

    Sheets("Cadastro").Cells(lin, 9) = txtDataPagto

    'para

    Sheets("Cadastro").Cells(lin, 9) = cdate(txtDataPagto.value)


    Natan

    sábado, 6 de dezembro de 2014 11:08
  • Carosouza...

    altere esse trecho:

    Sheets("Cadastro").Cells(lin, 9) = txtDataPagto

    'para

    Sheets("Cadastro").Cells(lin, 9) = cdate(txtDataPagto.value)


    Natan

    Olá Natan, a data txtDataPagto sai correta e é digitada quando o aluno paga a parcela e essa sai correta a que não sai e a data txtVencimento onde eu faço um cálculo para a próxima parcela ou única e sai com o dia invertido.

    A data de pagamento é mostrada na imagem2, ok??

    obrigado


    Carlos Rodrigues de Souza - Analista de Suporte

    sábado, 6 de dezembro de 2014 12:23
  • Então estamos falando da variável myDate?

    se for, faça o mesmo com ela:

    Sheets("Cadastro").Cells(lin, 7) = myDate

    'para

    Sheets("Cadastro").Cells(lin, 7) = cDate(myDate)



    Natan

    sábado, 6 de dezembro de 2014 17:23
  • Então estamos falando da variável myDate?

    se for, faça o mesmo com ela:

    Sheets("Cadastro").Cells(lin, 7) = myDate

    'para

    Sheets("Cadastro").Cells(lin, 7) = cDate(myDate)



    Natan

    Olá Natan, já fiz isso e nada, na hora de salvar na planilha ele inverte o dia com o mês se o dia for menor que 12!!

    Vou tentando (até a coluna toda da planilha deixei formatada como data e nada!!

    Obrigado e veja a imagem!!


    Carlos Rodrigues de Souza - Analista de Suporte

    sábado, 6 de dezembro de 2014 20:59
  • Carlos...

    se importa de me mandar sua plan?

    eu dou uma olhada e te respondo.

    fnatans@hotmail.com


    Natan

    sábado, 6 de dezembro de 2014 21:42
  • Carlos...

    se importa de me mandar sua plan?

    eu dou uma olhada e te respondo.

    fnatans@hotmail.com


    Natan

    Sim, sem problemas te envio agora!!! ENVIADA


    Carlos Rodrigues de Souza - Analista de Suporte


    • Editado Carosouza sábado, 6 de dezembro de 2014 22:32 pequena correção
    sábado, 6 de dezembro de 2014 22:25
  • Boa tarde Carosouza.

    O que deve estar ocorrendo é que para o VBA o formato de data considerado é sempre o Americano, ou seja, "mm/dd/yyyy". Isso sempre gera problema quando é preciso enviar datas para a planilha em formato brasileiro. O jeito é "enganar" o VBA, fazendo ele inverter os valores digitados ou calculados antes de enviar para a planilha.

    Veja se a solução a seguir resolve seu problema:

    http://social.msdn.microsoft.com/Forums/pt-BR/c467c1e8-f2fa-4bbc-8ac5-7ace74ff1df2/problema-com-data-vbaexcel?forum=vbapt

    Abraço.


    Filipe Magno

    domingo, 7 de dezembro de 2014 18:12
  • Carlos

    a solução é mais simples ainda...

    vi que o valor de myDate ia pra célula tanto direto como convertido... ou seja, o valor era o mesmo.

    fui na coluna e formatei como "data":

    resolveu, não precisei alterar nada no código... tenta ae:


    Natan

    domingo, 7 de dezembro de 2014 19:42
  • Olá Natan, vi que você formatou o ano da data com 2 casas e fiz aqui também e funcionou e tentei uma data personalizada e ok, MAS se eu formatar como data e 2 casas para o ano, e na opção Alterar/Excluir você pode filtrar por aluno ou deixar todos para gerar um Relatório / Exportar, e ele grava a listbox que aparece certo em outras duas planilhas que são Relatório e Exportar, daí ela inverte de novo o dia com o mês mesmo formatando a coluna como data do ano com 2 digitos, e aí como resolver??? 

    Só se eu fazer uma nova rotina para gravar da listbox para as planilhas Relatório e Exportar.

    Obrigado pela ajuda e vou buscar aprender mais sobre datas e VBA.


    Carlos Rodrigues de Souza - Analista de Suporte

    domingo, 7 de dezembro de 2014 23:44
  • Já testou formatar a data com o format?

    Sheets("Cadastro").Cells(lin, 7) = Format(myDate, "DD/MM/YYYY")


    Laionel Lellis


    segunda-feira, 8 de dezembro de 2014 11:22
  • Olá Laionel, sim já testei e fica assim por exemplo hoje 8/12/2014 e para o próximo mês fica assim 8/1/2015, só que quando eu levo para a Listbox ele inverte na listbox o mês com o dia ficando assim: 12/08/2014 e 01/08/2015

    Tá difícil controlar essas datas no Excel 2010, mas obrigado pela dica.


    Carlos Rodrigues de Souza - Analista de Suporte


    • Editado Carosouza segunda-feira, 8 de dezembro de 2014 12:18
    segunda-feira, 8 de dezembro de 2014 12:11
  • Bom dia!

    Vc chegou a testar a solução que propus acima?

    Pelo seu relato, a forma que descrevi resolve seu problema. Pelo menos nos meus formulários sempre funciona.

    Abraço.


    Filipe Magno

    segunda-feira, 8 de dezembro de 2014 12:13
  • Bom amigo acho que isso é o que você precisa para resolver seu problema.

    Sheets("Cadastro").Cells(lin, 7) = Format(myDate, "m/d/yyyy")
    Testado e funcionando.

    segunda-feira, 8 de dezembro de 2014 12:49
  • Olá a todos que me responderam nesse tópico, resolvi da seguinte forma:

    Criei uma no pasta com as planilhas Cadastro, dados, Relatório e Exportar.

    Deixei todas as células como padrão.

    Criei os forms frmCadastrar e frmDados

    Copiei todas as rotinas igualmente eu estava usando no arquivo anterior, e VOILÁ, está funcionando tudo normal agora com as datas. E acredito que de tanto ficar formatando as colunas da planilhas de um jeito e de outros o excel não estava entendendo mais o que eu queria.

    Fiz tudo isso com orientação do Prof Anderson que participa aqui no fórum.

    Agora só estou com uma dúvida no que está acontecendo e como fazer:

    Na minha listbox tenho um célula carregada que é a parcela assim 1/7, 2/7 e 3/7....., que puxa da planilha Cadastro.

    Daí eu faço uma seleção de alguns itens para impressão que eu pesquiso na listbox e ao mandar para a planilha Relatorio ficam como se fosse número assim:

    Sheets("Relatorio").Cells(linha, 5) = lsLista.List(Item, 4) fica assim 7/jan, 7/fev e 7/mar

    se eu formatar assim 

    Sheets("Relatorio").Cells(linha, 5) = Format(lsLista.List(Item, 4), "#/#") fica assim 

    4182/1, 4182/2 e 4182/3.......

    Como fazer para que ele continue como 1/7, 2/7, 3/7 ......como aparece no listbox, o problema é só este agora!!

    Obrigado a todos do Fórum!! 


    Carlos Rodrigues de Souza - Analista de Suporte

    segunda-feira, 8 de dezembro de 2014 22:06
  • Boa noite.

    A forma que conheço é a seguinte:

    Plan1.Range("A1").Value2 = "'" & UserForm1.TextBox1.Value

    É a mesma coisa que vc teria de fazer se fosse digitar manualmente.

    Abraço.


    Filipe Magno

    segunda-feira, 8 de dezembro de 2014 23:52
  • Boa noite.

    A forma que conheço é a seguinte:

    Plan1.Range("A1").Value2 = "'" & UserForm1.TextBox1.Value

    É a mesma coisa que vc teria de fazer se fosse digitar manualmente.

    Abraço.


    Filipe Magno

    Olá FelipeMagno, resolvi muito parecido com o que você digitou assim e a ajuda do Prof Anderson:

    Sheets("Relatorio").Cells(linha, 5) = "'" & lsLista.List(Item, 4)

    e na listbox o valor está 1/1 e ficou assim 1/1 na planilha.

    Obrigado!


    Carlos Rodrigues de Souza - Analista de Suporte


    • Editado Carosouza terça-feira, 9 de dezembro de 2014 04:23 resolvido
    terça-feira, 9 de dezembro de 2014 02:14
  • Olá!

    Recentemente passei pelo mesmo problema e a formatação para data não resolveram como comentado abaixo.

    Utilizando o Debug.print percebi que o erro é ocasionado quando converte o valor do tipo data (Date) para o tipo texto (String). No meu caso, tinha uma data 01/12/2016 que ao somar 365 o resultado era o correto (01/12/2017). Porém quando eu chamava a função criada para grava o valor na planilha, teria que passar o valor como String que gravava o valor como 42381 e não 43070.

    Solução: Adicionei variáveis do tipo Double para receber as datas e gravar diretamente na célula o valor da variável.

    Basicamente:

    Dim SomaDatas as Date

    Dim Aux as Double

    SomaDatas = DateAdd("d", 365, Cells(1,1).value)

    Aux = CDbl(SomaDatas)

    Cells(1,2).Value = Aux

    Feito as alterações no código, alterado o formado da célula para data, mostrando o valor corretamente.

    quarta-feira, 8 de novembro de 2017 12:50