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