Exportar um Relatório para PDF com VBA e a Função FILTRAR
Neste novo artigo, vou mostrar-te como podes usar a função FILTRAR para obter um conjunto de dados sobre um determinado critério. Vamos lá?
Uma das razões pela qual utilizamos a função FILTRAR [FILTER] no Excel é para obter um conjunto de dados individualizados sobre um determinado critério. Com a função FILTAR esses dados podem ser dinamicamente apresentados num relatório à parte, por exemplo numa nova folha ou mesmo num novo ficheiro.
Neste sentido, esse relatório, pode ser exportado instantaneamente para cada critério do FILTRO. É isso que vamos fazer neste Tutorial.
Não percas aqui o cenário de exemplo que partilho contigo, assim como o processo passo a passo. Se tiveres alguma dúvida, envia-nos a uma mensagem... ficamos à tua espera!
Faça aqui o download dos seus ficheiros de apoio!
Preparar os dados
Começamos por preparar os dados convertendo o intervalo numa tabela.
A tabela é definida com cabeçalhos.
E damos o nome à tabela: Marcas.
Definir a lista com todas as possíveis marcas da tabela
Uma vez que a tabela pode ter dados no futuro, vamos criar uma lista dinâmica, sem duplicados, com as marcas, utilizando a função EXCLUSIVOS [UNIQUE].
=EXCLUSIVOS(Marcas[Marca])
Esta lista será utilizada pela rotina em VBA, para correr todos os itens da lista, e aplicar o filtro de uma forma dinâmica e instantânea no relatório.
De seguida criamos uma folha para o relatório.
Definir os dados do relatório
No relatório vamos ter apenas uma extração simples dos dados, mas podes formatar o relatório a teu gosto. A função FILTRAR neste caso filtra apenas os dados da tabela, sendo que o cabeçalho é definido na folha.
Uma vez que o valor da célula E3, onde vai constar o critério para o filtro está sem valor, colocamos o último argumento da função [se_vazia] com um valor “Sem Dados”.
Este valor da célula E3 será preenchido através do código VBA.
=FILTRAR(Marcas;Marcas[Marca]=E3;"Sem Dados")
Criar a rotina em VBA
Começamos por aceder ao menu Programador [Developer] e ao comando.
A seguir criamos um módulo para conter o código.
No novo módulo começamos por definir as variáveis que vão ser utilizadas:
- Uma variável [Célula] para determinar o valor da célula que identifica a marca.
- Uma variável [Intervalo] para determinar o intervalo com a lista de marcas que será iterado pelo ciclo.
- Uma variável [Caminho] para guardar o caminho onde serão guardados os PDF. Esta variável é opcional, mas facilita a lógica caso o utilizador pretenda mudar o caminho no futuro.
Sub ExportarIntervalo() Dim Celula As Range Dim Intervalo As Range Dim Caminho As String End Sub
A seguir atribuímos as variáveis aos objetos.
Sub ExportarIntervalo() Dim Celula As Range Dim Intervalo As Range Dim Caminho As String Folha1.Activate ' Definir o Intervalo com uma variável através da lista única Set Intervalo = Folha1.Range("I3", Range("I3").End(xlDown)) ' Definir o caminho a guardar o ficheiro Caminho = ThisWorkbook.Path
No próximo passo do código podemos aplicar algumas configurações à página.
With Folha2.PageSetup .PrintArea = "$A$1:$H$20" ‘Definir a área de impressão .Orientation = xlLandscape ‘Definir a orientação da página .CenterHorizontally = True ‘Centrar a área de impressão (horizontal) .CenterVertically = True ‘Centrar a área de impressão (vertical) End With
Na última parte do código, definimos o ciclo que vai correr cada marca da lista, colocar o valor na célula para aplicar o critério do filtro e ainda exportar cada filtro para um ficheiro em formato PDF independente.
For Each Celula In Intervalo Folha2.Range("E3").Value = Celula.Value Folha2.ExportAsFixedFormat xlTypePDF, Caminho & "\" & Celula.Text Next Celula End Sub
Assim o código completo da rotina é o indicado em baixo.
Sub ExportarIntervalo() Dim Celula As Range Dim Intervalo As Range Dim Caminho As String Folha1.Activate ' Definir o Intervalo com uma variável através da lista única Set Intervalo = Folha1.Range("I3", Range("I3").End(xlDown)) ' Definir o caminho a guardar o ficheiro Caminho = ThisWorkbook.Path ' Definir as propriedades para a folha a imprimir With Folha2.PageSetup .PrintArea = "$A$1:$H$20" ' Definir a área de impressão .Orientation = xlLandscape ' Aplicar a orientação da página .CenterHorizontally = True ' Centrar na horizontal .CenterVertically = True ' Centrar na vertical End With ' Definir o ciclo para o Filtro For Each Celula In Intervalo Folha2.Range("E3").Value = Celula.Value Folha2.ExportAsFixedFormat xlTypePDF, Caminho & "\" & Celula.Text Next Celula End Sub
Outros conteúdos relevantes:
Validação de dados com VBA! Verificar células em branco.
Provavelmente já sentiu a necessidade de validar células, no Microsoft Excel, mediante um determinado contexto! Por exemplo...
Ferramenta Goal Seek - Potencie-a com a ajuda do VBA!
Conhece, ou já alguma vez utilizou a ferramenta Goal Seek? Se não, fique a saber que é uma ferramenta bastante útil, na gestão...