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