Ir ao conteúdo
  • Cadastre-se

Filtro de datas usando VBA


Luciana Goes

Posts recomendados

Meus amigos,

Boa tarde!

Estou precisando de uma ajuda...

Elaborei uma planilha a fim de filtrar determinados períodos de datas utilizando o VBA, mas está com erro e não estou conseguindo resolver.

A planilha está disponível em http://www.sendspace.com/file/up3qxp

Será que alguém poderia me ajudar, por favor?

Obrigada!;)

Link para o comentário
Compartilhar em outros sites

Luciana, substituí o que está em vermelho na sua planilha:

ActiveSheet.Range("[COLOR="Red"]$A$4:$A$400[/COLOR]").AutoFilter Field:=1, Criteria1:=criterio1, _
Operator:=xlAnd
ActiveSheet.Range("[COLOR="Red"]$B$4:$B$400[/COLOR]").AutoFilter Field:=2, Criteria1:=criterio2, Operator:=xlAnd, Criteria2:=criterio3

Faz filtrar o que você quer na coluna que tem as informações do filtro. Funcionou aqui pra mim. É isso o que você procurava?

Link para o comentário
Compartilhar em outros sites

Olá Jeffsilveira!

O grande problema é que quando seleciono as datas no combobox referentes ao período que quero que faça o filtro, essas datas retornam um número, e não data.

Dessa forma, meu filtro não é confiável.

A sua dica funcionou também, mas ainda há o problema da data converter em número inteiro.

Obrigada pela ajuda!

Link para o comentário
Compartilhar em outros sites

Bom dia Luciana,

Substitua todo o código de seu formulário por este e faça o teste.

Se tentar realizar o filtro e receber um resultado diferente, nos informe qual período de data utilizou.

Private Sub CommandButton1_Click()

Dim criterio1 As String

If ckopcao.Value = False And ckperiodo.Value = False Then MsgBox "Escolha os dois campos que deseja usar como filtro", vbCritical, "Aviso de Segurança": Exit Sub

If txtdado1.Value = "" Or txtdado2.Value = "" Or txtdado3.Value = "" Then MsgBox "Preencha todos os campos do formulário!", vbCritical, "Aviso de Segurança": Exit Sub

If CLng(CDate(txtdado2.Value)) > CLng(CDate(txtdado3.Value)) Then MsgBox "A data inicial é inferior a data final!", vbCritical, "Aviso de Segurança": Exit Sub

If ckopcao.Value = True And ckperiodo.Value = True Then

campo1 = 1

campo2 = 2

End If

criterio1 = "=" & txtdado1.Text

criterio2 = ">=" & CLng(CDate(txtdado2.Value))

criterio3 = "<=" & CLng(CDate(txtdado3.Value))

On Error Resume Next

ActiveSheet.ShowAllData

ActiveSheet.Range("$A$4:$D$4000").AutoFilter Field:=1, Criteria1:=criterio1

ActiveSheet.Range("$A$4:$D$4000").AutoFilter Field:=2, Criteria1:=criterio2, Operator:=xlAnd, Criteria2:=criterio3

Range("D5").Value = campo1

Range("D6").Value = campo2

Range("A1").Select

Unload Me

End Sub

Private Sub txtdado2_Change()

txtdado2.Value = CDate(txtdado2.Value)

End Sub

Private Sub txtdado3_Change()

txtdado3.Value = CDate(txtdado3.Value)

End Sub

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...