Como fazer um filtro avançado com macro?

Sei como usar o filtro avançado, mas quero saber como faz pra salvar todas as etapas gravando uma macro. Quando coloco pra gravar a macro e realizo o passo a passo pra pesquisar no filtro avançado. A macro não salva.
Ex: Eu tenho um banco de dados com:
(nome
idade
endereço
email)
Eu quero pesquisar o nome da pessoa e na caixa de resultados me informar os dados dela. Sem ter que dar aquela volta toda dentro do filtro avançado novamente.
Atribuindo a macro para um botão.
Desde ja agradeço


Eu ainda estou com dificuldade para aplicar esse código. A minha planilha esta assim.

E o banco de dados está em outra Planilha.

Como consigo executar o filtro avançado com macro? E tambem como eu consigo escrever um nome na minha área de critério sem ser um nome específico?

@VitorNicollas … sempre que precisar colocar mais informações, utilize comentários ou edite sua pergunta por favor

@VitorNicollas

Segue

Sub FiltrarColunaA()

	Dim oSheet as object
	Dim oDataRange as object
	Dim oFiltre as object
	Dim oFilterField(0) As New com.sun.star.sheet.TableFilterField
	Dim Filtro as String
   
		oSheet = ThisComponent.Sheets.getByName("Planilha1") rem Nome da sua aba
		oDataRange = oSheet.getCellRangeByName("A1:C6") rem Sua Range que queira filtrar
		
		oFiltre = oDataRange.createFilterDescriptor(true) rem comando para criar o método filtro
		oDataRange.filter(oFiltre)  rem Limpa os filtros
		
		rem coloque aqui o termo que queira filtrar
		Filtro = ""
			
		With oFiltre                                    
			.ContainsHeader = true 'Informa que contém cabeçalho
   			.UseRegularExpressions = true 'comando para informar que está utilizando expressões regulares
		End with

		With oFilterField(0)
    		.Field = 0 rem Número da coluna que vai aplicar o filtro: A = 0, B = 1 ...
    		.IsNumeric = False rem Informa se o filtro é número ou texto (string)
    		.Operator = com.sun.star.sheet.FilterOperator.EQUAL rem Operação do filtro
    		.StringValue = Filtro rem "*" & Filtro & "*" 'Caso queira filtrar algo específico
		End with    
				
				'rem Comando para execução do filtro
				oFiltre.setFilterFields(oFilterField()) 
				oDataRange.filter(oFiltre)

End sub

Créditos:

https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1sheet.html#af9e5fd8fd26fc252748d97ebd68ea6b1

Dá uma olhada na resposta:
Como fazer Macro de Filtro Avançado no Calc ?

Obrigado. vlw

Ola @VitorNicollas, @LeandroVieira, com base na do @Grafeno mencionada acima, compactei para esta:

Sub FiltroAvancado
rem Grafeno – ask.88558
'O############################################################################O
Dim oDoc, oPlanAtiva, oPlan2, oIntervalo, oCriterios, oDestino, oFiltro As Object
oIntervalo = ThisComponent.Sheets.getByName( "Plan2" ).getCellRangeByName( "A1:b9" )  ' Fonte de dados.
oCriterios = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName( "a14:b15" )  'Local do Filtro.
oDestino = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName( "a20" )  ' Local da Resultado.
oFiltro = oCriterios.createFilterDescriptorByObject( oIntervalo )
oFiltro.CopyOutputData = True
oFiltro.OutputPosition = oDestino.CellAddress
oFiltro.ContainsHeader = True
oIntervalo.Filter( oFiltro ) 'Filtrar
End Sub

obrigadoo.

Eu ainda nn estou consiguindo aplicar esse codigo. Poderia por gentileza detalhar bem. como por exemplo: Onde que eu digito, oque seria “Field = 0 rem Número da coluna que vai aplicar o filtro:”, se é possivel que na mesma planilha fica o banco de dados e os resultados. Por que sou bem leigo no assunto.

Segue arquivo exemplo

Caso queira, entre em contato direto: veja aqui: https://wiki.documentfoundation.org/User:Schiavinatto

e envie o seu arquivo.

muito obrigado

Acabei de enviar o arquivo.

@VitorNicollas o comando “.Field = 0 rem Número da coluna que vai aplicar o filtro: A = 0, B = 1 ...” … esse 0 corresponde a coluna A, ou seja, caso que precise fazer o filtro na coluna C, deve ficar “.Field = 2”. O libreoffice trabalha com plano de coordenadas para macro partindo o ponto de origem A1 (col = 0 e lin =0).

1 Like