VBA  - Excel : Acessando dados com ADO (Copiando dados do Access p/o Excel)


Geralmente recebo emails com dúvidas em como acessar dados com aplicativos Office como Word , Excel , PowerPoint , etc.

Eu sempre prometo que irei colocar um artigo sobre o assunto no site , e hoje estou cumprindo o prometido.

Quero deixar claro que não pretendo abordar este assunto em futuros artigos pois , embora o VBA esteja intimamente relacionado com o Visual Basic e a integração com os aplicativos Office seja uma questão muito importante , simplesmente eu não teria tempo para tratar de tantos assuntos relacionados.

Então quero reiterar que o foco é Visual Basic , VB.NET e ASP e ASP.NET.

Você pode usar código Visual Basic em seus aplicativo office para automatizar tarefas e dar maior produtividade a seus arquivos .doc e suas planilhas eletrônicas.

Neste artigo eu vou mostrar como você pode acessar uma base de dados Access e preencher uma planilha Excel com os dados obtidos usando o editor Visual Basic do Excel.

Os artigos já publicados no site sobre VBA podem lhe ajudar a ter uma visão geral do assunto:

  1. Usando VBA  - Aprenda a usar o VBA em suas aplicações VB. Tenha o Office aos seus pés.
  2. ADO - Usando com Visual Basic , VBScript e VBA - Neste artigo mostramos como usar ADO com Visual Basic , VBScript e VBA ( Visual Basic for Applications).

Vamos acessar o banco de dados Northwind.mdb e obter informações que serão exibidas na planilha Excel. Eu criei uma consulta que retorna o valor total de compras e a quantidade realizada por cada cliente. O código SQL é o seguinte :

SELECT Orders.CustomerID, Sum([Order Details].UnitPrice) AS ValorTotal, Sum([Order Details].Quantity) AS QuantidadeTotal
FROM (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID
GROUP BY Orders.CustomerID
ORDER BY Orders.CustomerID;

Abra o o Excel (eu estou usando o Excel do Office 97) e no menu Ferramentas selecione Macro | Editor Visual Basic

No menu Ferramentas do Editor selecione a opção referências e inclua a biblioteca de acesso a dados ADO no projeto. Sem isto não teremos acesso aos objetos de acesso a dados.

No menu Inserir do Editor selecione User Form para incluir um novo formulário no seu projeto.

Na caixa de ferramentas insira um objeto Botão de comando e um objeto Imagem no formulário.(No controle Imagem eu inclui o logo do site)

Os nomes usados no projeto são:

Clique duas vezes sobre o botão de comando para poder inserir o código VBA que irá conectar com o banco de dados e extrair as informações para o Excel.

O seu ambiente de trabalho deverá estar parecido com o da figura abaixo.

Agora inclua o seguinte código no evento Click do botão de comando:

Private Sub cmdConexaoBD_Click()
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
'define a conexão com o banco de dados Northwind.mdb
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/teste/Northwind.mdb"
cn.Open
'define um novo objeto recordset
Set rs = New ADODB.Recordset
'define a instrução sql
sql = "SELECT Orders.CustomerID, Sum([Order Details].UnitPrice) AS ValorTotal, Sum([Order Details].Quantity) AS QuantidadeTotal"
sql = sql & " FROM (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) 
sql = sql & " INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID"
sql = sql & " GROUP BY Orders.CustomerID"
sql = sql & " ORDER BY Orders.CustomerID"
'gera o recordset para o sql sobre a conexao definida
rs.Open sql, cn
'define o cabeçalho das células no excel
Range("A1").Value = "Codigo do Cliente"
Range("B1").Value = "Quantidade Total"
Range("C1").Value = "Valor total dos Pedidos"

i = 2
If Not rs.EOF Then
     Do While Not rs.EOF
        Range("A" & i).Value = rs(0)
        Range("B" & i).Value = rs(2)
        Range("C" & i).Value = rs(1)
        rs.MoveNext
        i = i + 1
    Loop
End If

cn.Close

End Sub

 

O código é muito simples ; geramos um objeto recordset via instrução SQL e preenchemos a planilha Excel.

Ao executar o projeto o formulário irá abrir e quando o usuário clicar no botão de comando teremos o resultado exibido na figura abaixo:

Pronto , você acabou de criar um formulário com código ADO que acessa um banco de dados e preenche uma planilha EXCEL ; tudo isto feito no próprio EXCEL com o editor Visual Basic.

Como VBA no Excel e sua competência e imaginação , o céu é o limite...

Eu sei é apenas VBA , mas eu gosto ....

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti