Filtro Avançado no VBA

Anônima
2025-05-29T15:50:44+00:00

Olá. Alguém consegue me ajudar com o filtro avançado no VBA? AdvancedFilter xlFilterInPlace ou xlFilterCopy

Link para baixar a planilha: https://drive.google.com/file/d/1MVXmU3pH9b1K_Hh2SjX3rucgpVf4tGtR/view?usp=sharing

Já tentei usar o código sem colocar o local de destino dos dados e também colocando o destino e ainda não funciona. Ao invés de copiar os dados na BaseRegistro e colar na linha 4 da planilha Filtro, está ocultando a tabela na planilha BaseRegistro e colando apenas o cabeçalho na planilha Filtro.

O Combobox CbbPesquisarDataEntrada já estou deixando no formato americano, que é o formato aceito para filtrar a data no VBA.

COM FILTER IN PLACE

Dim BaseRegistro As Range, intC As Range, i As Integer

Dim coluna(1 To 13) As Integer

'Relacionando as colunas da planilha BaseRegistros que serão filtradas na planilha Filtro na linha 4

coluna(1) = 13: coluna(2) = 3: coluna(3) = 4: coluna(4) = 5: coluna(5) = 6: coluna(6) = 7:

coluna(7) = 8: coluna(8) = 15: coluna(9) = 17: coluna(10) = 19: coluna(11) = 21: coluna(12) = 22: coluna(13) = 23:

Filtro.Cells(2, 3).Value = Balanca.CbbPesquisarFornecedor

Filtro.Cells(2, 4).Value = Balanca.CbbPesquisarOrdemdeCompra

Filtro.Cells(2, 5).Value = Balanca.txtPesquisarNotaFiscal

Filtro.Cells(2, 6).Value = Balanca.CbbPesquisarFazenda

Filtro.Cells(2, 7).Value = Balanca.CbbPesquisarLocaldeDescarga

Filtro.Cells(2, 8).Value = Balanca.CbbPesquisarProduto

Filtro.Cells(2, 13).Value = Balanca.txtPesquisarDataEntrada

'Colocar a DATA DE ENTRADA no formato americano

If Filtro.Cells(2, 13).Value = "" Then

Filtro.Cells(2, 13).Value = ""

Else

Filtro.Cells(2, 13).Value = ">=" & Format(Balanca.txtPesquisarDataEntrada, "mm-dd-yyyy")

End If

Filtro.Cells(2, 15).Value = Balanca.txtPesquisarTicket

Filtro.Cells(2, 17).Value = Balanca.txtPesquisarPlaca

Filtro.Cells(2, 19).Value = Balanca.txtPesquisarDataSaida

'Colocar a DATA DE SAÍDA no formato americano

If Filtro.Cells(2, 19).Value = "" Then

Filtro.Cells(2, 19).Value = ""

Else

Filtro.Cells(2, 19).Value = "<=" & Format(Balanca.txtPesquisarDataSaida, "mm-dd-yyyy")

End If

Filtro.Cells(2, 21).Value = Balanca.CbbPesquisarChapa

Filtro.Cells(2, 22).Value = Balanca.CbbPesquisarUsuario

Filtro.Cells(2, 23).Value = Balanca.CbbPesquisarSafra

Set BaseRegistro = Registros.Range("A1").CurrentRegion

Set intC = Filtro.Range("A1:AE2")

Filtro.Range("A4").CurrentRegion.Offset(1, 0).ClearContents

BaseRegistro.AdvancedFilter xlFilterInPlace, intC

For i = 1 To 13

BaseRegistro.Columns(coluna(i)).SpecialCells(xlCellTypeVisible).Copy Filtro.Cells(4, i) 

Next

End Sub

COM XLFILTER COPY

Dim BaseRegistro As Range, intC As Range, Destinho as Range, i As Integer

Dim coluna(1 To 13) As Integer

'Relacionando as colunas da planilha BaseRegistros que serão filtradas na planilha Filtro na linha 4

coluna(1) = 13: coluna(2) = 3: coluna(3) = 4: coluna(4) = 5: coluna(5) = 6: coluna(6) = 7:

coluna(7) = 8: coluna(8) = 15: coluna(9) = 17: coluna(10) = 19: coluna(11) = 21: coluna(12) = 22: coluna(13) = 23:

Filtro.Cells(2, 3).Value = Balanca.CbbPesquisarFornecedor

Filtro.Cells(2, 4).Value = Balanca.CbbPesquisarOrdemdeCompra

Filtro.Cells(2, 5).Value = Balanca.txtPesquisarNotaFiscal

Filtro.Cells(2, 6).Value = Balanca.CbbPesquisarFazenda

Filtro.Cells(2, 7).Value = Balanca.CbbPesquisarLocaldeDescarga

Filtro.Cells(2, 8).Value = Balanca.CbbPesquisarProduto

Filtro.Cells(2, 13).Value = Balanca.txtPesquisarDataEntrada

If Filtro.Cells(2, 13).Value = "" Then

Filtro.Cells(2, 13).Value = ""

Else

Filtro.Cells(2, 13).Value = ">=" & Format(Balanca.txtPesquisarDataEntrada, "mm-dd-yyyy")

End If

Filtro.Cells(2, 15).Value = Balanca.txtPesquisarTicket

Filtro.Cells(2, 17).Value = Balanca.txtPesquisarPlaca

Filtro.Cells(2, 19).Value = Balanca.txtPesquisarDataSaida

If Filtro.Cells(2, 19).Value = "" Then

Filtro.Cells(2, 19).Value = ""

Else

Filtro.Cells(2, 19).Value = "<=" & Format(Balanca.txtPesquisarDataSaida, "mm-dd-yyyy")

End If

Filtro.Cells(2, 21).Value = Balanca.CbbPesquisarChapa

Filtro.Cells(2, 22).Value = Balanca.CbbPesquisarUsuario

Filtro.Cells(2, 23).Value = Balanca.CbbPesquisarSafra

Set BaseRegistro = Registros.Range("A1").CurrentRegion

Set intC = Filtro.Range("A1:AE2")

Set Destino = Filtro.Range("A4:M4")

Filtro.Range("A4").CurrentRegion.Offset(1, 0).ClearContents

BaseRegistro.AdvancedFilter xlFilterCopy, intC , Destino

End Sub

Microsoft 365 e Office | Excel | Para Educação | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

1 resposta

Classificar por: Mais útil
  1. Anônima
    2025-05-30T20:31:34+00:00

    Bom, eu descobri que apesar dos valores no intervalo de critérios estarem vazios, na verdade estavam ficando com apóstrofos, vindos do valor vazio dos controles, por isso o filtro não estava funcionando.

    A solução foi colocar uma condição para colocar o valor vazio em cada célula do intervalo de critérios, caso o valor do controle também for vazio.

    Esta resposta foi útil?

    0 comentários Sem comentários