Notifications
Clear all

Problema com Relatório (if Entre datas)

5 Posts
2 Usuários
0 Reactions
1,014 Visualizações
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Bom dia a todos!

Estou com um problema e já pesquisei muito a respeito e não consegui achar a solução.
Tenho uma planilha com alguns lançamentos feito atráves de UserForm, e um dos dados digitados é a "Data do Lançamento". Até aí tudo bem.
Acontece que estou tentando gerar um relatório que filtre os lançamentos entre uma data inicial e data final que são inseridos em TextBox, porém o excel não está fazendo corretamente e está trazendo as linhas incorretas. Depurando o código abaixo, notei que ao verificar o valor de "Plan5.Cells(X, 1)" que é a célula verificada na planilha do 'banco de dados', ele trás a data normalmente dd/mm/yyyy e o valor do "fm_RelatorioPorPeriodo.tb_DataInicial" está com aspas "dd/mm/yyyy", acredito que esteja aí o erro do código. Outra questão é o tratamento padrão do excel para data (mm/dd/yyyy).

O código para inserir a data do lançamento na planilha dos dados é (não sei se estou fazendo corretamente):

ActiveCell = Format(fm_LancamentoFaltas.tb_DataLancamento, "dd/mm/yyyy")

Código do Relatório

Sub RelatorioPorPeriodo()
        
    Sheets("Relatório por Aluno").Visible = True
    Sheets("Relatório por Aluno").Range("A2:K200000").ClearContents
    
        UltimaLinha = Plan5.Cells(Rows.Count, "A").End(xlUp).Row
        UltimaColuna = Plan5.Cells(1, Columns.Count).End(xlToLeft).Column
        linha = 2
        
            For X = 2 To UltimaLinha
                If Plan5.Cells(X, 1) >= Format(fm_RelatorioPorPeriodo.tb_DataInicial, "dd/mm/yyyy") And Plan5.Cells(X, 1) <= Format(fm_RelatorioPorPeriodo.tb_DataFinal, "dd/mm/yyyy") Then
                    For i = 1 To UltimaColuna
                        Plan6.Cells(linha, i) = Plan5.Cells(X, i)
                    Next
                    linha = linha + 1
                End If
            Next
          
    Unload fm_RelatorioPorAluno
                
End Sub

Peço a ajuda de vocês, como posso resolver este problema?
Agradeço desde já e um ótimo final de semana a todos! :D

 
Postado : 08/07/2016 9:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Já pensou em filtrar (via VBA), depois retornar onde desejar?

Tem como postar seu arquivo modelo?

Att

 
Postado : 08/07/2016 9:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

experimente:
If Plan5.Cells(X, 1) >= cdate(Format(fm_RelatorioPorPeriodo.tb_DataInicial, "dd/mm/yyyy")) And Plan5.Cells(X, 1) <=cdate( Format(fm_RelatorioPorPeriodo.tb_DataFinal, "dd/mm/yyyy")) Then...
ou
If Plan5.Cells(X, 1) >= cdate(fm_RelatorioPorPeriodo.tb_DataInicial) And Plan5.Cells(X, 1) <= cdate(fm_RelatorioPorPeriodo.tb_DataFinal) Then...

 
Postado : 08/07/2016 10:11 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

experimente:
If Plan5.Cells(X, 1) >= cdate(Format(fm_RelatorioPorPeriodo.tb_DataInicial, "dd/mm/yyyy")) And Plan5.Cells(X, 1) <=cdate( Format(fm_RelatorioPorPeriodo.tb_DataFinal, "dd/mm/yyyy")) Then...
ou
If Plan5.Cells(X, 1) >= cdate(fm_RelatorioPorPeriodo.tb_DataInicial) And Plan5.Cells(X, 1) <= cdate(fm_RelatorioPorPeriodo.tb_DataFinal) Then...

Reinaldo,

Deu certo este código, muito obrigado!! :D

If Plan5.Cells(X, 1) >= cdate(fm_RelatorioPorPeriodo.tb_DataInicial) And Plan5.Cells(X, 1) <= cdate(fm_RelatorioPorPeriodo.tb_DataFinal) Then...

Boa tarde!!

Já pensou em filtrar (via VBA), depois retornar onde desejar?

Tem como postar seu arquivo modelo?

Att

Alexandre, na verdade o que eu quero é que o relatório exiba os resultados em outra planilha através do critério que eu expliquei. O código que eu estou utilizando está atendendo, só estava com problema na questão da data.
Mas obrigado pela resposta!

 
Postado : 08/07/2016 11:17 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Aproveitando o tópico, preciso de mais uma ajuda:

Estou tentando fazer uma verificação de data na TextBox da data inicial com o seguinte código:

Private Sub tb_DataInicial_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    DataVer = CDate(Format(Me.tb_DataInicial, "dd/mm/yyyy"))
        If IsDate(DataVer) = False Then
            MsgBox ("Erro!!!")
        End If

End Sub

Porém o excel ainda está validando conforme o formato "mm/dd/yyyy".
Alguma sugestão?

 
Postado : 08/07/2016 11:30 am