none
Exportar arquivo access para excel RRS feed

  • Pergunta

  • Estou com o seguinte problema; tenho um banco de dados access que executo algumas consultas todo mês e as exporto para uma planilha excel, porém, para pastas de trabalho diferentes. O que necessito é criar uma macro ou um módulo VBA para exportar estas mesmas consultas para uma mesma pasta de trabalho do Excel onde cada consulta fique em uma planilha (aba) diferente. Como fazer?
    sexta-feira, 31 de outubro de 2014 11:49

Respostas

  • "para uma planilha excel, porém, para pastas de trabalho diferentes"

    Acho que você quis dizer que exporta as consultas para uma pasta de trabalho de Excel, mas em planilhas diferentes. Considerando isso, utilize o código a seguir numa pasta de trabalho do Excel:

    'Fazer referência à biblioteca 'Microsoft ActiveX 2.6 Data Objects
    Dim mcnn As ADODB.Connection
    
    Public Sub pMain()
      Set mcnn = New ADODB.Connection
      
      'Altere abaixo o caminho do banco de dados:
      mcnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Data Source=c:\temp\banco.mdb;"
      mcnn.Open
      
      pImport "SELECT * FROM [Tabela1]", ThisWorkbook.Worksheets("Plan1")
      pImport "SELECT * FROM [Tabela2]", ThisWorkbook.Worksheets("Plan2")
      pImport "SELECT * FROM [Tabela3]", ThisWorkbook.Worksheets("Plan3")
      '...e assim por diante...
      
      'Limpa memória:
      mcnn.Close
      Set mcnn = Nothing
    End Sub
    
    Private Sub pImport(sSQL As String, ws As Excel.Worksheet)
      Dim rst As ADODB.Recordset
      Dim lCol As Long
      
      'Executa consulta:
      Set rst = mcnn.Execute(sSQL)
      
      'Limpa planilha:
      ws.Cells.Delete
      
      'Escreve cabeçalho:
      For lCol = 0 To rst.Fields.Count - 1
        ws.Range("A1").Offset(, lCol) = rst.Fields(lCol).Name
      Next lCol
      
      'Cola dados:
      ws.Range("A2").CopyFromRecordset rst
        
      'Limpa memória:
      rst.Close
      Set rst = Nothing
    End Sub
     
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 10 de novembro de 2014 20:04
    Moderador

Todas as Respostas

  • Dhautis, 

    Se estás começando do zero, precisas aprender inicialmente como é feita a integração do Excel com Access via ADO.

    Sugiro que leias o artigo Integração Excel e Access para iniciar o seu projeto.

    Após iniciado surgirão as dúvidas, as quais você poderá tirar aqui no fórum, pois tem muita gente boa e disposta a ajudar por aqui...

    Boa sorte!


    Roberto Santos


    sexta-feira, 31 de outubro de 2014 20:04
  • "para uma planilha excel, porém, para pastas de trabalho diferentes"

    Acho que você quis dizer que exporta as consultas para uma pasta de trabalho de Excel, mas em planilhas diferentes. Considerando isso, utilize o código a seguir numa pasta de trabalho do Excel:

    'Fazer referência à biblioteca 'Microsoft ActiveX 2.6 Data Objects
    Dim mcnn As ADODB.Connection
    
    Public Sub pMain()
      Set mcnn = New ADODB.Connection
      
      'Altere abaixo o caminho do banco de dados:
      mcnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Data Source=c:\temp\banco.mdb;"
      mcnn.Open
      
      pImport "SELECT * FROM [Tabela1]", ThisWorkbook.Worksheets("Plan1")
      pImport "SELECT * FROM [Tabela2]", ThisWorkbook.Worksheets("Plan2")
      pImport "SELECT * FROM [Tabela3]", ThisWorkbook.Worksheets("Plan3")
      '...e assim por diante...
      
      'Limpa memória:
      mcnn.Close
      Set mcnn = Nothing
    End Sub
    
    Private Sub pImport(sSQL As String, ws As Excel.Worksheet)
      Dim rst As ADODB.Recordset
      Dim lCol As Long
      
      'Executa consulta:
      Set rst = mcnn.Execute(sSQL)
      
      'Limpa planilha:
      ws.Cells.Delete
      
      'Escreve cabeçalho:
      For lCol = 0 To rst.Fields.Count - 1
        ws.Range("A1").Offset(, lCol) = rst.Fields(lCol).Name
      Next lCol
      
      'Cola dados:
      ws.Range("A2").CopyFromRecordset rst
        
      'Limpa memória:
      rst.Close
      Set rst = Nothing
    End Sub
     
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 10 de novembro de 2014 20:04
    Moderador