Executar Autofiltro por macro

Gostaria de facilitar a vida de Usuários leigos em uso de planilha.

Existe alguma maneira de Macro fazer a seleção de dados em Autofiltro.

Com o gravador de macros somente aciona os controle do autofiltro ( as setinhas ), com este comando ".uno:DataFilterAutoFilter", as escolhas não são registradas.

@schiavinatto, Não ficou muito claro sua dúvida. Teria como explicar melhor?

Ola @WBastos, assim com tem a macro Filtro Avançado, ( Macro de Filtro Avançado no Calc) que posso usar informações com variáveis em células, e ligar a um botão, automatizando para o usuário final “leigo em planilhas”. Necessito usar o Autofiltro em uma macro para a finalidade de facilitar a busca de informação em um banco de dados para alteração.

.
Pesando bem o Filtro Avançado também vai funcionar para o meu propósito, pois quando a saída é no mesmo local da fonte de dados, ele oculta as linhas. Deixa eu testar melhor.


Testado quando feito manualmente, as linhas, não filtradas ficam ocultas, MAS na macro que indiquei acima, quando a resposta é no mesmo local, ela apaga os dados. Infelizmente não serve.

1 Like

Não sei se já resolveu a situação, mas para que os dados com filtro avançados não sejam perdidos, mas apenas ocultados (conforme feito manualmente), basta não usar as propriedades

.CopyOutputData e .OutputPosition

Conforme explicação do Grafeno. Porém, se você deseja utilizar as propriedades mesmo assim, colocando as informações filtradas no mesmo local, basta declarar como false a 1ª propriedade:

VariavelComFilterDescriptor.CopyOutputData = false

Ola @FelipeAle, fiquei boiando, poste a macro completa, não encontrei onde alterar.

No exemplo o hyperlink acima:

Sub FiltroAvancado
Dim oDoc As Object, oPlan1 As Object
Dim oIntervalo As Object, oCriterios As Object
Dim oFiltro As Object
oDoc = ThisComponent
oPlan1 = oDoc.Sheets.getByName( “PLANILHA ÚNICA” )
oIntervalo = oPlan1.getCellRangeByName( “A4:J1000000” )
oCriterios = oPlan1.getCellRangeByName( “J2:J3” )
oFiltro = oCriterios.createFilterDescriptorByObject( oIntervalo )
oFiltro.CopyOutputData = true
oFiltro.OutputPosition = oIntervalo.CellAddress
oFiltro.ContainsHeader = True
‘Filtrar’
oIntervalo.Filter( oFiltro )
End Sub

De acordo com @Grafeno , você pode

  1. apagar estas duas linhas de código;

oFiltro.CopyOutputData = True
oFiltro.OutputPosition = oIntervalo.CellAddress

Ou,
2. Mudar a 1ª propriedade para false e manter as linhas

oFiltro.CopyOutputData = False
oFiltro.OutputPosition = oIntervalo.CellAddress

Ok, entendido, obrigado @FelipeAle