Página 1 de 1

Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 13:58
por Leonardo7
Boa tarde amigos,

Gostaria muito da ajuda de vcs para corrigir meu código de filtro. No filtro eu tenho um critério data (ex.: minha planilha carregar todos os dados do banco com base na data inserida no formulário ou seja carregar todos os dados <01/01/2020). Segue planilha para apoio.
Código: Selecionar todos
Private Sub btFiltrar_Click()
 'Limpa a planilha antes de carregar os dados do filtro
 Call LimparRelatório

 ultimaLinha = wshBD.Cells(Rows.Count, "A").End(xlUp).Row
 lin = 3
  For i = 2 To ultimaLinha
  
  If wshBD.Cells(i, 9) < TextBoxData.Value And wshBD.Cells(i, 8) <> 0 Then
    wshRel.Cells(lin, 1) = wshBD.Cells(i, 1)
    wshRel.Cells(lin, 2) = wshBD.Cells(i, 2)
    wshRel.Cells(lin, 3) = wshBD.Cells(i, 3)
    wshRel.Cells(lin, 4) = wshBD.Cells(i, 4)
    wshRel.Cells(lin, 5) = wshBD.Cells(i, 5)
    wshRel.Cells(lin, 6) = wshBD.Cells(i, 6)
    wshRel.Cells(lin, 7) = wshBD.Cells(i, 7)
    wshRel.Cells(lin, 8) = wshBD.Cells(i, 8)
    wshRel.Cells(lin, 9) = wshBD.Cells(i, 9)
    wshRel.Cells(lin, 10) = wshBD.Cells(i, 10)
    wshRel.Cells(lin, 11) = wshBD.Cells(i, 11)
    lin = lin + 1
  End If
  Next
  
Call Formata_Relatorio

End Sub

Private Sub TextBoxData_Change()

    'Inserir as barras na data
    If Len(TextBoxData.Text) = 2 Then
    TextBoxData = TextBoxData + "/"
    End If
    
    If Len(TextBoxData.Text) = 5 Then
    TextBoxData = TextBoxData + "/"
    End If


End Sub

Re: Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 15:04
por Jimmy
Olá,

Você não explicou que erro está ocorrendo. Diga o que acontece, quando você faz o que, de que forma.

Aproveite e troque:
Código: Selecionar todos
  wshRel.Cells(lin, 1) = wshBD.Cells(i, 1)
  wshRel.Cells(lin, 2) = wshBD.Cells(i, 2)
  wshRel.Cells(lin, 3) = wshBD.Cells(i, 3)
  wshRel.Cells(lin, 4) = wshBD.Cells(i, 4)
  wshRel.Cells(lin, 5) = wshBD.Cells(i, 5)
  wshRel.Cells(lin, 6) = wshBD.Cells(i, 6)
  wshRel.Cells(lin, 7) = wshBD.Cells(i, 7)
  wshRel.Cells(lin, 8) = wshBD.Cells(i, 8)
  wshRel.Cells(lin, 9) = wshBD.Cells(i, 9)
  wshRel.Cells(lin, 10) = wshBD.Cells(i, 10)
  wshRel.Cells(lin, 11) = wshBD.Cells(i, 11)
por
Código: Selecionar todos
  For Col = 1 To 11
      wshRel.Cells(lin, Col) = wshBD.Cells(i, Col)
  Next
Jimmy San Juan

Re: Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 15:28
por Leonardo7
Jimmy escreveu:Olá,

Você não explicou que erro está ocorrendo. Diga o que acontece, quando você faz o que, de que forma.

Aproveite e troque:
Código: Selecionar todos
  wshRel.Cells(lin, 1) = wshBD.Cells(i, 1)
  wshRel.Cells(lin, 2) = wshBD.Cells(i, 2)
  wshRel.Cells(lin, 3) = wshBD.Cells(i, 3)
  wshRel.Cells(lin, 4) = wshBD.Cells(i, 4)
  wshRel.Cells(lin, 5) = wshBD.Cells(i, 5)
  wshRel.Cells(lin, 6) = wshBD.Cells(i, 6)
  wshRel.Cells(lin, 7) = wshBD.Cells(i, 7)
  wshRel.Cells(lin, 8) = wshBD.Cells(i, 8)
  wshRel.Cells(lin, 9) = wshBD.Cells(i, 9)
  wshRel.Cells(lin, 10) = wshBD.Cells(i, 10)
  wshRel.Cells(lin, 11) = wshBD.Cells(i, 11)
por
Código: Selecionar todos
  For Col = 1 To 11
      wshRel.Cells(lin, Col) = wshBD.Cells(i, Col)
  Next
Jimmy San Juan
Boa tarde Jimmy,

O código não está carregando os dados do banco com base na data que eu colo na textboxData. Conforme o código abaixo, ele só carregar com base em um dos critérios wshBD.Cells(i, 8) <> 0, mas eu preciso que ele carregue pela data tbm.
Código: Selecionar todos
If wshBD.Cells(i, 9) < TextBoxData.Value And wshBD.Cells(i, 8) <> 0 Then

Re: Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 15:33
por Leonardo7
Jimmy escreveu:Olá,

Você não explicou que erro está ocorrendo. Diga o que acontece, quando você faz o que, de que forma.

Aproveite e troque:
Código: Selecionar todos
  wshRel.Cells(lin, 1) = wshBD.Cells(i, 1)
  wshRel.Cells(lin, 2) = wshBD.Cells(i, 2)
  wshRel.Cells(lin, 3) = wshBD.Cells(i, 3)
  wshRel.Cells(lin, 4) = wshBD.Cells(i, 4)
  wshRel.Cells(lin, 5) = wshBD.Cells(i, 5)
  wshRel.Cells(lin, 6) = wshBD.Cells(i, 6)
  wshRel.Cells(lin, 7) = wshBD.Cells(i, 7)
  wshRel.Cells(lin, 8) = wshBD.Cells(i, 8)
  wshRel.Cells(lin, 9) = wshBD.Cells(i, 9)
  wshRel.Cells(lin, 10) = wshBD.Cells(i, 10)
  wshRel.Cells(lin, 11) = wshBD.Cells(i, 11)
por
Código: Selecionar todos
  For Col = 1 To 11
      wshRel.Cells(lin, Col) = wshBD.Cells(i, Col)
  Next
Jimmy San Juan
Desculpe, mas tenho pouca experiencia em VBA e não conseguir substituir o código que vc me enviou. A macro nem roda.
Código: Selecionar todos
  For Col = 1 To 11
      wshRel.Cells(lin, Col) = wshBD.Cells(i, Col)
  Next

Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 16:00
por Jimmy
Ok, entendido. Vou ver.

Re: Excel VBA - Filtro com critério

Enviado: 21 Ago 2019 às 17:16
por Jimmy
Veja se está de acordo com o esperado.

Você tem duas rotinas iguais para filtragem: uma no formulário e outra em módulo. Alterei a do formulário. Seria melhor manter apenas uma. Se vai acionar o filtro de duas formas diferentes, ou mais, mantenha 1 rotina, por exemplo a do módulo, e acione-a a partir da macro do formulário.

Jimmy San Juan

Re: Excel VBA - Filtro com critério

Enviado: 22 Ago 2019 às 20:37
por Leonardo7
Jimmy escreveu:Veja se está de acordo com o esperado.

Você tem duas rotinas iguais para filtragem: uma no formulário e outra em módulo. Alterei a do formulário. Seria melhor manter apenas uma. Se vai acionar o filtro de duas formas diferentes, ou mais, mantenha 1 rotina, por exemplo a do módulo, e acione-a a partir da macro do formulário.

Jimmy San Juan
Deu muito certo. Obrigado

Excel VBA - Filtro com critério

Enviado: 22 Ago 2019 às 21:07
por Jimmy
Ok, se tiver problema, avise.

Peço que verifique as mensagens acima, e dê um like (mãozinha) naquelas que de alguma forma te ajudaram.

Fecho o tópico se o problema estiver resolvido. Espere alguns dias, se quiser ter certeza de que passou nos testes.

Jimmy San Juan