Importando e Exportando dados do Excel para o SQL Server com VBA
Abaixo segue uma proposta que se mostra uma das formas de recuperar e inserir dados do Excel para o SQL Server com VBA.
No SQL Server 2005 Express criei uma base de dados de nome "test_excel" com uma única tabela chamada "names" com os seguintes campos:
id - int - identity
name - nvarchar(50) - allownull = false
|
O código abaixo serve para extrair os dados no excel na planilha de nome names:
|
Sub RetrieveSQLServerData()
' Cria a conexão.
Dim cntest_excel As ADODB.Connection
Set cntest_excel = New ADODB.Connection
' Variável para armazenar a String de Conexão.
Dim strConn As String
'Informa o SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"
'Conecta à base de dados Pubs no servidor local.
strConn = strConn & "DATA SOURCE=WKS-DEVELOPER7\SQLEXPRESS;INITIAL CATALOG=test_excel;"
'Usa autenticação integrada.
strConn = strConn & " INTEGRATED SECURITY=sspi;"
'Abre a conexão.
cntest_excel.Open strConn
' Cria o objeto Recordset.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
With rsPubs
' Associa a conexão.
.ActiveConnection = cntest_excel
' Extrai os dados.
.Open "SELECT * FROM names"
' Coloca os dados na planilha.
Worksheets("names").Range("A1").CopyFromRecordset rsPubs
' Fecha a transação
.Close
End With
' Fecha conexão
cntest_excel.Close
Set rsPubs = Nothing
Set cntest_excel = Nothing
End Sub |
Para inserir dados na tabela, digite uma lista de nomes simples na coluna A da planilha nomes, por exemplo:
Julio
Robert
Edmilson
Felipe |
Com isso, o seguinte código serve para inserir estes nomes na tabela names do SQL Server:
|
Sub InsertDataIntoSQLServer()
' Cria a conexão.
Dim cntest_excel As ADODB.Connection
Set cntest_excel = New ADODB.Connection
' Variável para controlar o percorrer das linhas da planilha.
Dim i As Long
' Variável para armazenar a String de Conexão.
Dim strConn As String
'Informa o SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"
'Conecta à base de dados Pubs no servidor local.
strConn = strConn & "DATA SOURCE=WKS-DEVELOPER7\SQLEXPRESS;INITIAL CATALOG=test_excel;"
'Usa autenticação integrada.
strConn = strConn & " INTEGRATED SECURITY=sspi;"
'Abre a conexão.
cntest_excel.Open strConn
i = 1
Do Until IsEmpty(Worksheets("names").Cells(i, 1))
cntest_excel.Execute "INSERT INTO names (name) values ('" & Worksheets("names").Cells(i, 1).Value & "')"
i = i + 1
Loop
' Fecha conexão
cntest_excel.Close
Set rsPubs = Nothing
Set cntest_excel = Nothing
End Sub |
O código funciona para o SQL Server com as configurações tradicionais. Verifique parâmetros como usuário e senha para fazer funcionar na sua máquina corretamente. Não esqueça também de adcionar a referência ao Microsoft Active Data Objects no projeto VBA.
Abraços
Tomás Vásquez
http://www.tomasvasquez.com.br