Oi! Seja bem-vindo!
Hoje vamos aprender como acessar o SQL Server pelo Excel via macro, ou código VBA/Visual Basic. Para isso, passo a passo vamos montar nossa planilha desde o zero até a criação de um gráfico no Excel com base em dados do SQL Server:
Requisitos no Excel para acessar o SQL
Antes de começarmos, alguns requisitos são necessários no Excel:
1) Criar uma planilha habilitada para macros: Abra o Excel e salve sua planilha como XLSM. Para fazer isso basta selecionar o tipo de arquivo Excel na janela de salvar arquivos:

2) Renomeie uma das planilhas do arquivo para “Vendas”: Nosso código VBA salva os dados do SQL em uma planilha chamada “Vendas”. Então crie uma nova planilha, ou renomeie umas das planilhas existentes para Vendas:

3) Ativar as ferramentas de desenvolvimento: Vá até arquivo (file) e depois opções (options). A seguir clique em personalizar cinturão (customize ribbon). Nessa tela ative a aba “Desenvolvedor” (developer), conforme abaixo:

4) Adicionar as referências necessárias ao arquivo Excel: Para que nossa macro funcione e o Excel possa acessar o SQL, você precisará ativar o componente “Microsoft ActiveX Data Objects 6.1”. Para fazer isso, clique na aba “desenvolvedor” (developer) e a seguir em Visual Basic:

Será aberta a janela do visual basic:

Nessa janela, clique em ferramentas (tools) e depois referências (References):

Na janela abaixo localize a referência “Microsoft ActiveX Data Objects 6.1”, marque a referência para adicionar e depois clique em OK:

5) Adicionar módulo e incluir o código VBA: Os módulos guardam códigos VBA compartilhado para todas as planilhas do arquivo Excel. Para adicionar um novo módulo em sua planilha, clique com o botão direito no projeto VBA, vá até inserir e depois clique em módulo:

A seguir, basta copiar e colar o código que preparei para nosso exemplo em seu Excel. A macro que fiz considera que o seu SQL server está instalado localmente, se não estiver é necessário alterar a string de conexão que alimenta a variável str_ConnString.

Como acessar o SQL Server pelo Excel via Macro
Para que você disponha dos dados que serão lidos pelo Excel, é necessário criar o banco de dados e a tabela de testes do script abaixo no seu SQL:
-- Banco de testes
use master
if db_id('curso') is not null
drop database curso
go
create database curso
go
use curso
go
create table vendas_consolidado (
ano smallint,
vl money
)
insert vendas_consolidado values
(2000, 7123780.23),
(2001, 7041789.23),
(2002, 7065998.23),
(2003, 6889111.23),
(2004, 6790123.23),
(2005, 7080234.23),
(2006, 7011091.23),
(2007, 7255212.23),
(2008, 7523101.23),
(2009, 7377889.23),
(2010, 7768704.23),
(2011, 8827512.87),
(2012, 7899093.99),
(2013, 9768704.31),
(2014, 9218751.47),
(2015, 10298759.12),
(2016, 10283745.70),
(2017, 11000223.67)
Feito isso, volte ao Excel, clique em qualquer local dentro do código VBA de nossa “macro”, e pressionar F5. Após um breve processamento (poderá aparecer a mensagem “não respondendo” no Excel) o código VBA terá alimentado a planilha Vendas com os dados do SQL:

Ao final da execução, você terá os dados do SQL no seu Excel:

Abaixo o script completo usado no vídeo de hoje:
------------------------------------------------------------------
-- Acessar o SQL pelo Excel
------------------------------------------------------------------
--------------------------------------------------
-- Banco de dados para nosso teste
--------------------------------------------------
-- Banco de testes
use master
if db_id('curso') is not null
drop database curso
go
create database curso
go
use curso
go
create table vendas_consolidado (
ano smallint,
vl money
)
insert vendas_consolidado values
(2000, 7123780.23),
(2001, 7041789.23),
(2002, 7065998.23),
(2003, 6889111.23),
(2004, 6790123.23),
(2005, 7080234.23),
(2006, 7011091.23),
(2007, 7255212.23),
(2008, 7523101.23),
(2009, 7377889.23),
(2010, 7768704.23),
(2011, 8827512.87),
(2012, 7899093.99),
(2013, 9768704.31),
(2014, 9218751.47),
(2015, 10298759.12),
(2016, 10283745.70),
(2017, 11000223.67)
-- Requisitos no Excel:
/*
-- Salvar o arquivo como XLSX
-- Criar uma planilha com o nome de "vendas"
-- Ativar ferramentas de desenvolvimento:
File -> Options -> Customize Ribbon (Ativar aba developer)
-- Adicionar referência
Tools -> References -> Add Reference
Microsoft ActiveX Data Objects 6.1
-- Código a ser copiado para o módulo do projeto VBA:
Option Explicit
Public Sub sb_ListaDadosVendas()
Dim obj_Connection As New ADODB.Connection
Dim obj_RecordSet As New ADODB.Recordset
Dim str_SQL As String
Dim str_PlanilhaDestino As String
Dim str_ConnString As String
Dim str_LinhaInicial As String
str_PlanilhaDestino = "Vendas"
str_ConnString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=curso;Data Source=."
str_LinhaInicial = 2
if Range(str_PlanilhaDestino & "!D2").Value = "" or Range(str_PlanilhaDestino & "!E2").Value = "" Then
str_SQL = "select * from vendas_consolidado"
else
str_SQL = "select * from vendas_consolidado where ano between " + CStr(Range(str_PlanilhaDestino & "!D2").Value) + " and " + CStr(Range(str_PlanilhaDestino & "!E2").Value)
end if
' Limpa dados
Range(str_PlanilhaDestino & "!A2:B1000").Clear
' Executa query no SQL
obj_Connection.Open str_ConnString
obj_RecordSet.Source = obj_Connection
obj_RecordSet.Open str_SQL, obj_Connection
' Salva dados no Excel
Sheets(str_PlanilhaDestino).Cells(CInt(str_LinhaInicial), 1).CopyFromRecordset obj_RecordSet
' Finaliza conexão e objetos
obj_RecordSet.Close
obj_Connection.Close
Set obj_RecordSet = Nothing
Set obj_Connection = Nothing
End Sub
*/
--------------------------------------------------
-- Excluir dados de teste
--------------------------------------------------
use master
go
drop database curso
go
Gráfico e botão para acesso a macro
Opa, quase esquecendo. Enquanto estava gravando o vídeo acabei me empolgando e criando um botão para acesso a macro e um gráfico das vendas lidas do SQL.
Se quiser ver como fiz, dá uma olhadinha no vídeo desse artigo.
CONCLUSÃO
Seja via macro ou através de outras ferramentas, existem várias formas de acessar o SQL pelo Excel. Particularmente gosto dessa pela simplicidade, depois dos requisitos do Excel, é só copiar e colar um código no módulo e pronto, você tem dados do SQL diretamente no seu Excel.
De posse disso, o céu é o limite: Gráficos, controles, históricos, transformação de dados, etc… Com o Excel e o SQL juntos, as possibilidades para você criar coisas legais, automáticas, e que tragam destaque para a sua carreira são definitivamente ilimitadas.
Abraço do seu amigo Josué 🙂
Boa Noite Josué, a minha ficou assim, pois preciso conectar em um servidor na nossa rede usando windows authentication, porém por algum motivo não traz nada, nem apresenta erro, faz ideia do que possa ser?
Option Explicit
Public Sub sb_ListaDadosVendas()
Dim obj_Connection As New ADODB.Connection
Dim obj_RecordSet As New ADODB.Recordset
Dim str_SQL As String
Dim str_PlanilhaDestino As String
Dim str_ConnString As String
Dim str_LinhaInicial As String
str_PlanilhaDestino = “dados”
str_ConnString = “Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=SCF;Data Source=GRU3WVSQLPROD2”
str_LinhaInicial = 2
If Range(str_PlanilhaDestino & “!D2”).Value = “” Or Range(str_PlanilhaDestino & “!E2”).Value = “” Then
str_SQL = “select top 10 * from impedimento”
Else
str_SQL = “select * from impedimento where dataHora between ” + CStr(Range(str_PlanilhaDestino & “!D2″).Value) + ” and ” + CStr(Range(str_PlanilhaDestino & “!E2”).Value)
End If
‘ Limpa dados
Range(str_PlanilhaDestino & “!A2:B1000”).Clear
‘ Executa query no SQL
obj_Connection.Open str_ConnString
obj_RecordSet.Source = obj_Connection
obj_RecordSet.Open str_SQL, obj_Connection
‘ Salva dados no Excel
Sheets(str_PlanilhaDestino).Cells(CInt(str_LinhaInicial), 1).CopyFromRecordset obj_RecordSet
‘ Finaliza conexão e objetos
obj_RecordSet.Close
obj_Connection.Close
Set obj_RecordSet = Nothing
Set obj_Connection = Nothing
End Sub
Opa, boa noite!
Geralmente é problema de conectividade entre a estação e o banco ou ausência de permissão via windows autentication do usuário da planilha.
Abraço,
Josué
Boa tarde…
Você tem algum video onde mostra como conectar ao meu banco de dados que ja tenho no sql ?
Pois já tenho um banco de dados em um servidor aqui e agora quero fazer a conexão dele pelo excel para eu importar dados para uma tabela.
Voce pode me ajudar nisso?
Oi Luiz, bom dia! No momento não tenho um vídeo com esse assunto na área pública (o conteúdo existe como parte do meu curso fechado de administração avançada). Vou anotar aqui para uma postagem futura. Abraço, Josué
Boa Noite,
Fiz o procedimento porem me retorna um erro 3706
Provedor não encontrado. É possível que ele não esteja instalado corretamente.
Olá Rodrigo, pela mensagem de erro parece que o provider está com problemas. Sugiro verificar esse link de suporte da microsoft: https://support.microsoft.com/en-my/help/862471/error-internal-error-in-adodb-connection-number-3706-provider-cannot-b