Importando e Exportando dados do Excel para o SQL Server com VBA

Aproveitando a pergunta de um colega, deixo aqui a resposta que se mostra uma das formas de recuperar e inserir dados do Excel para o SQL Server com VBA.

Para acompanhar o tópico, viste o link: http://www.juliobattisti.com.br/forum/forum_posts.asp?TID=15402

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:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 minhas configurações. 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

VBA – Abrindo uma página do IE

Uma necessidade um pouco antiga, é sempre bom lembrar. Uma forma fácil de abrir uma página da Web pelo VBA é chamar uma instância do Internet Explorer. Um código de exemplo pode ser visto abaixo:

Private Sub OpenPage()
    Dim browser As Variant
    Set browser = CreateObject(“InternetExplorer.Application”)
    browser.Navigate (“www.google.com”)
    browser.Visible = True
End Sub

O bacana é que dá para trabalhar com algumas propriedade do browser, permitindo controlar um pouco mais a navegação. O exemplo abaixo mostra como abrir uma página bloqueando recursos de navegação e redimensionamento da página:

Private Sub DrawingIn_Click()
    Dim browser As Variant
    Set browser = CreateObject(“InternetExplorer.Application”)
    browser.Navigate (“www.google.com”)
    browser.StatusBar = False
    browser.Toolbar = False
    browser.Visible = True
    browser.Resizable = False
    browser.AddressBar = False
End Sub

Um coisa interessante a colocar, é que o maior aproveitamento que se pode fazer disse, é estabelecer navegação com critérios de QueryString por exemplo.

Tomás Vásquez

Access 2003 Add-in: Source Code Control

Equipes de software que desenvolvem em Microsoft Access, sofrem com um problema que é o controle de versão de código.

É difícil até tentar enxergar esse nível de controle pelo fato do Access ser composto geralmente de um arquivo. Porém, a Microsoft disponibiliza um Add-In que possibilita a integração do Microsoft Access com o Visual Source Safe. O bacana é que, mesmo sem alterar a estrutura do aplicativo, o controlador de versão consegue separar os objetos do Access com todos os comandos de check-in, check-out e tudo mais, possibilitando até que mais de um desenvolvedor consiga trabalhar num mesmo projeto ou arquivo. O link para o Add-In seque abaixo:

Access 2003 Add-in: Source Code Control

Bom proveito em seus projetos!

Tomás Vásquez

Excel: O famoso (mas nem tanto) SAMPLES.XLS

Tenho que admitir. Nos fóruns de Excel VBA que frequento, muitas perguntas só pude responder por conta da existência deste arquivo.

O arquivo SAMPLES.XLS é copiado para a pasta SAMPLES que fica dentro da pasta onde o Microsoft Office foi instalado (exceto para o Office 2003). O arquivo contém alguns dos mais utilizados exemplos dos recursos do Microsoft Excel, desde funções até códigos em VBA. O grande destaque é que o arquivo é montado pela esquipe da Microsoft em um padrão muito bem formatado e auto-explicativo. A versão em português não deixa a desejar. Segue uma figura com a cara do arquivo:

Para quem não conseguir encontrar o dito em sua máquina, disponibilizo aqui o link para download. A cópia do arquivo é da própria Microsoft e assinada digitalmente por ela:

SAMPLES.XLS

Bom proveito!

Tomás Vásquez

Tecnologia e Programação