quarta-feira, 22 de março de 2017

Gerar Relatório Via VBA

Gerar Relatório Via VBA
Através da programação em VBA nós podemos deixar nossas rotinas do Excel cada vez mais fáceis. Vamos aprender ao longo desse artigo como gerar um relatório via VBA a partir de um banco de dados do Excel com critérios que podem varia conforme necessitarmos.

Para podermos gerar nosso relatório temos que ter um banco de dados onde estarão nossas informações e este deve estar de forma ordenada para que a consulta possa trazer as informações corretamente. Na tabela 1 você tem um exemplo de nosso banco de dados ordenado.



Tabela1: Banco de dados ordenado
Partindo do princípio que temos um banco de dados ordenado vamos a criação do relatório.
No nosso exemplo iremos criar um relatório que irá consultar um banco de dados de clientes na aba “Bco_Dados” e trazer apenas aqueles que atenderem ao nosso critério de consulta para aba “Relatório” conforme Tabela 2.

Para que isso seja possível nós vamos precisar de usar duas estruturas de programação, a primeira é a estrutura de repetição para que nosso código faça a comparação em todas as linhas da nossa tabela, a segunda estrutura que precisaremos usar é a estrutura de decisão onde nosso código vai verificar se a linha selecionada atende ao nosso critério ou não, onde caso atenda ela irá copiar os dados necessários daquela linha para o nosso relatório.

1º Passo
A primeira coisa a se fazer é limpar a aba onde recebera as informações do nosso relatório, pois ela pode estar com dados de relatórios anteriores. Para isso usaremos o seguinte código:

Sheets("Relatório").Range("A3:E1000").Clear

Nesse código nós estamos selecionando o intervalo de A3 até E1000 da aba “Relatório” e executado o comando Clear que quer dizer limpar.

Em seguida temos que criar nossa estrutura de repetição. Para isso iremos usar a estrutura Do While... Loop para que o nosso código possa percorrer todo nosso banco de dados.

Nesse comando nós estamos informando para estrutura que ela deve repetir o código enquanto a linha verificada da planilha “Bco_Dados” for diferente de vazio.

Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While Sheets("Bco_Dados").Cells(linha, 1) <> ""
   linha = linha + 1
Loop
End Sub

Note que criamos também uma variável chamada “linha” do tipo inteira para que possa informar a nossa estrutura de repetição qual a linha que ela está verificando, para isso também é necessário que nós incrementemos essa variável, ou seja, somemos mais 1 a cada vez que ela passar pelo Loop, fazendo com que na primeira vez a variável “linha” seja 2, depois 3, depois 4 e assim por diante até que a linha esteja vazia, a fim de não gerar um Loop infinito, pois ele nunca sairia da linha 2, e com isso travar o sistema.

Note que demos um valor inicial de 2 para variável linha, isso foi feito porque nosso banco de dados começa a seu preenchimento na linha 2.

2º Passo
Chegou a hora de adicionarmos nossa estrutura de decisão, a estrutura If...Else...End If, com ela nós vamos verificar se a linha atende nosso critério ou não, onde caso atenda o código copia as informações para a aba “Relatório” caso não atenda e não cópia.

Na nossa comparação estamos pesquisando na aba “Bco_Dados” por clientes que tenho idade de igual a 25 anos

Note que ele está fazendo a comparação na célula referente a variável linha da coluna 3 que é a coluna de idade.

Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While Sheets("Bco_Dados").Cells(linha, 1) <> ""
If Sheets("Bco_Dados").Cells(linha, 3) = 25 Then

Else

End if
   linha = linha + 1
Loop
End Sub

3º Passo
No terceiro passo chegou a hora de informar o que fazer caso a linha pesquisada atenda nosso critério do relatório, no nosso caso se atender o critério queremos que as informações sejam copiadas para aba “Relatório”.

Vimos que nosso banco de dados é composto de 5 colunas, com isso precisaremos escrever 5 linhas de comando para podermos levar as 5 colunas para nosso relatório, uma para cada coluna. Para isso iremos usar o seguinte código:

Sub Relatório()
Dim linha as Integer
Dim linha2 as Integer

linha = 2
linha2 = 3
'Limpar relatório
Sheets("Relatório").Range("A3:E1000").Clear
'Preencher relatório
Do While Sheets("Bco_Dados").Cells(linha, 1) <> ""
If Sheets("Bco_Dados").Cells(linha, 3) = 25 Then
            Sheets("Relatório").Cells(linha2, 1) = Sheets("Bco_Dados").Cells(linha, 1)
Sheets("Relatório").Cells(linha2, 2) = Sheets("Bco_Dados").Cells(linha, 2)
Sheets("Relatório").Cells(linha2, 3) = Sheets("Bco_Dados").Cells(linha, 3)
Sheets("Relatório").Cells(linha2, 4) = Sheets("Bco_Dados").Cells(linha, 4)
Sheets("Relatório").Cells(linha2, 5) = Sheets("Bco_Dados").Cells(linha, 5)
linha2 = linha2 + 1
End If
linha = linha + 1
Loop
End Sub

No código acima estamos informando que caso atenda nosso critério de seleção nosso código deve copiar para a aba “Relatório” na célula linha2 coluna 1 os dados que estão na aba “Bco_Dados” célula linha coluna 1 e assim sucessivamente, uma para cada coluna, lembrando de mudar a coluna a cada uma das 5 linha de código digitada.

Note que aqui nós criamos uma outra variável inteira de nome “linha2” e iniciando com valor 3, isso foi feito porque nosso relatório vai começar a ser preenchido a partir da terceira linha e o fato de não usarmos a variável “linha” criada no começo é porque nem sempre os dados que queremos vão estar um debaixo do outro, com isso caso usássemos essa variável teriam espações em branco dentro do nosso relatório, lembrando que essa variável também tem que ser incrementada com 1 a cada vez que nosso critério for atendido afim de que o código não subscreva por cima de um item já levado para o banco de dados.



Tabela 2: Relatório Gerado


Nenhum comentário:

Postar um comentário