Como usar o Microsoft.ACE.OLEDB.12.0
- Última atualização em 15 Abril 2012
- Acessos: 13265
Neste breve artigo falarei sobre o uso do Microsoft.ACE.OLEDB.12.0 para acessar dados de uma planilha Excel. Até a versão 2003 (Excel 97-2003), usávamos a versão Excel 8.0 para acessar os dados de uma planilha Excel utilizando o ActiveX Data Objetcs (ADO). A partir do Office 2007, a Microsoft adotou o ACE para acesso de dados ao invés do JET.
Para o exemplo, você precisará referenciar as seguintes bibliotecas:
- ADO
- Windows Script Host Model
Para referenciar tais bibliotecas, acesso o VBE (Visual Basic Editor) e no menu Referências, busque na lista pelas bibliotecas listadas acima
O Windows Script Host Model será utilizado para abrir os arquivos Excel para importação dos dados. Já o ADO será utilizado para abrir a conexão de dados bem como o recordset (conjunto de registros).
No Exemplo, queremos abrir tanto arquivos com extensão XLS (Excel 97-2003) e XLSX (Excel 2007 e 2010). Neste caso, o código ficará como:
Abaixo, exemplo do código:
Sub AccessandoExcelComoBaseDeDados()
' requer refs aos objetos Windows Script Host Model e ADO
Const sNomePasta As String = "\ARQUIVOS_DADOS"
Dim objFSO As New FileSystemObject
Dim objFolder As Folder
Dim objFile As File
Dim objConn As New ADODB.Connection
Dim objRs As New ADODB.Recordset
Set objFolder = objFSO.GetFolder(ThisWorkbook.Path & sNomePasta)
For Each objFile In objFolder.Files
Select Case UCase(Right(objFile.Name, 4))
Case "XLSX"
objConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & objFile.Path & ";" & _
"Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"
objRs.Open "SELECT * FROM [Sheet1$];", objConn, adOpenKeyset, adLockOptimistic
For i = 1 To objRs.Fields.Count
ThisWorkbook.Sheets(2).Cells(1, i).Value = objRs.Fields(i - 1).Name
Next i
ThisWorkbook.Sheets(2).Range("A2").CopyFromRecordset objRs
objRs.Close
objConn.Close
Case ".XLS"
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & objFile.Path & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes"";"
objRs.Open "SELECT * FROM [DADOS$]", objConn, adOpenKeyset, adLockOptimistic
For i = 1 To objRs.Fields.Count
ThisWorkbook.Sheets(1).Cells(1, i).Value = objRs.Fields(i - 1).Name
Next i
ThisWorkbook.Sheets(1).Range("A2").CopyFromRecordset objRs
objRs.Close
objConn.Close
End Select
Next objFile
On Error Resume Next
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
End Sub