Neste artigo veja como criar relatórios de SQL Excel com VBA passo-a-passo. Neste exemplo fazemos com access, mas pode ser feito com qualquer banco de dados como por exemplo SQL Server.
Configurações do Relatório SQL
No nosso exemplo de relatório criamos uma planilha de configurações, aonde colocamos as opções de:
- Local Banco: Local aonde está o arquivo do banco de dados Access.
- Vendedores: Lista com todos os vendedores que poderá selecionar no relatório.
- Ordem: Campos do relatório pelos quais pode ordenar o relatório.
- Selecionado: Campo que identifica a ordem que será aplicada no gráfico.
Relatório com SQL no Excel
O relatório com SQL no Excel tem a seguinte estrutura, nele temos os filtros ao topo, os campos do relatório e a ordem.
Veja que temos aqui os filtros de:
- Data Inicial: Data inicial do relatório.
- Data final: Data final do período do relatório.
- Vendedor: Nome do vendedor que será aplicado no filtro do relatório, podendo deixar em branco no caso queira todos os vendedores.
No campo de ordem você pode selecionar qualquer ordem do relatório, ele será aplicado de forma crescente ou decrescente.
Código VBA para o Relatório SQL
No relatório SQL colocamos o código abaixo.
Para fazer isso primeiro habilite as macros, clique neste link e faça desta forma: https://www.guiadoexcel.com.br/as-macros-foram-desabilitadas-como-habilitar-macros-no-excel/
Clique então em Inserir->Módulo e coloque o código conforme vemos abaixo:
Option Explicit
Global cnn As ADODB.Connection
Private Sub gsConectarBD()
Dim SQL As String
If cnn Is Nothing Then
Set cnn = New ADODB.Connection
End If
If cnn.State <> 1 Then
'String de conexão VBA Access
SQL = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Configuracoes.Range("localBanco").Value & ";" & " Jet OLEDB:Database"
cnn.Open SQL
End If
End Sub
Private Sub gsDesconectarBD()
On Error Resume Next
cnn.Close
End Sub
Public Sub lsRelatorioComissoes()
On Error GoTo TratarErro
Dim lsql As String
Dim lrs As ADODB.Recordset
Dim lsht As Worksheet
Dim tbl As ListObject
'Conectar
gsConectarBD
Set lrs = New ADODB.Recordset
Set lsht = relComissoes
Set tbl = lsht.ListObjects("tRelatorio")
Application.EnableEvents = False
'Limpar a tabela
If Not tbl Is Nothing Then
tbl.DataBodyRange.Delete
End If
lsql = "SELECT VENDA.ID, VENDA.DTVENDA, CATEGORIA.DESCATEGORIA, PRODUTO.DESPRODUTO, " & _
"VENDEDOR.DESVENDEDOR, PRODUTO.NUMPRECO AS VLRUNIT, VENDA.NUMQTDE, " & _
"VENDA.NUMQTDE*PRODUTO.NUMPRECO AS TOTAL, VENDEDOR.PERCCOMISSAO, " & _
"VENDA.NUMQTDE*PRODUTO.NUMPRECO*VENDEDOR.PERCCOMISSAO AS COMISSAO " & _
"FROM ((VENDA INNER JOIN PRODUTO ON VENDA.IDPRODUTO = PRODUTO.ID) " & _
"INNER JOIN CATEGORIA ON PRODUTO.IDCATEGORIA = CATEGORIA.ID) " & _
"INNER JOIN VENDEDOR ON VENDA.IDVENDEDOR = VENDEDOR.ID " & _
"WHERE (((VENDA.DTVENDA) Between @datainicial And @datafinal) AND " & _
"((VENDEDOR.DESVENDEDOR) @vendedor)) ORDER BY @ordem @forma;"
lsql = Replace(lsql, "@datainicial", "#" & Format(lsht.Range("dtini"), "mm/dd/yyyy") & "#")
lsql = Replace(lsql, "@datafinal", "#" & Format(lsht.Range("dtfim"), "mm/dd/yyyy") & "#")
If lsht.Range("vendedor").Value <> "" Then
lsql = Replace(lsql, "@vendedor", "='" & lsht.Range("vendedor") & "'")
Else
lsql = Replace(lsql, "@vendedor", "<>""""")
End If
lsql = Replace(lsql, "@ordem", Configuracoes.Range("ordem").Value)
If lsht.Range("forma").Value = "Crescente" Then
lsql = Replace(lsql, "@forma", "ASC")
Else
lsql = Replace(lsql, "@forma", "DESC")
End If
'Consulta
lrs.Open lsql, cnn, adOpenStatic, adLockBatchOptimistic
'Carrega na planilha
lsht.Range("B12").CopyFromRecordset lrs
Sair:
Application.EnableEvents = True
Exit Sub
TratarErro:
MsgBox "Erro na aplicação: " & CStr(Err.Number) & " - " & Err.Description
GoTo Sair
Resume
End Sub
O código acima realiza a conexão com o banco de dados Access e realiza uma consulta com os parâmetros presentes no relatório, além da ordem dos campos que serão aplicadas.
Para mudar e fazer uma conexão com outros bancos de dados é necessário mudar a String de conexão.
No site: https://www.connectionstrings.com/ você pode pegar a string de conexão para vários tipos de bancos:
Download Planilha Como Criar Relatórios SQL no Excel
Clique no botão abaixo para realizar o download do Excel de exemplo: