Como inserir dados em uma planilha usando comandos SQL
Neste artigo eu compartilho o resultado de uma pesquisa que fiz onde encontrei um método para poder inserir dados em uma planilha através de comandos SQL.

Este post foi originalmente publicado em https://officevbavsto.blogspot.com/2011/05/excel-sql-inserindo-dados-em-outra.html.
Certa vez, me perguntaram se era possível inserir dados em outra planilha do Excel sem ter que abri-la. Após um pouco de pesquisa, encontrei um método para poder inserir dados em uma planilha através de comandos SQL.
Usarei a seguinte planilha como base de dados:

O código é simples, na verdade, todo o segredo está na instrução SQL que você executa. O interessante é que podemos fazer de duas forma: a primeira preenche os dados de uma planilha existente e a segunda cria uma nova planilha dentro de uma pasta de trabalho.
Lembrando apenas que para poder usar o código de exemplo desta planilha você precisa adicionar referência ao Microsoft ActiveX Objects 2.1.
Crie uma planilha nova
Sub consulta_excel()
Dim cn As ADODB.Connection
Dim cnString As String
Dim sqlString As String
Set cn = New ADODB.Connection
cnString = "Provider=Microsoft.Jet.OLEDB.4.0;"
cnString = cnString & "Data Source=H:\MyExcel.xls;"
cnString = cnString & "Extended Properties=Excel 8.0;"
cn.ConnectionString = cnString
sqlString = "SELECT * INTO [Sheet1] "
sqlString = sqlString & "IN '' [Excel 8.0;Database=H:\NEWMyExcel.xls] "
sqlString = sqlString & "FROM [Cotacoes$A2:D100]"
cn.Open
cn.Execute sqlString, adExecuteNoRecords
cn.Close
Set cn = Nothing
End Sub
SELECT * INTO [Sheet1]
- É importante que a planilha informada entre os colchetes não exista na pasta de trabalho onde você irá inserir os dados, caso contrário isto gerará um erro. No exemplo acima, "Sheet1" não pode existir na pasta de trabalho "NEWMyExcel.xls".

"IN '' [Excel 8.0;Database=H:\NEWMyExcel.xls] "
- Note que existem duas asplas simples, é importante mantê-las, caso contrário ocorrerá um erro. Aqui eu especifiquei qual a pasta de trabalho destino ("H:\NEWMyExcel.xls").

Existem mais duas outras maneiras de se inserir os dados criando uma nova planilha.
[...]
sqlString = "SELECT * INTO "
sqlString = sqlString & "[Excel 8.0;Database=H:\NEWMyExcel.xls].[Sheet1] "
sqlString = sqlString & "FROM [Cotacoes$A2:D100]"
[...]
Ao invés de usar o argumento "IN" como no exemplo anterior, apenas indico o caminho da pasta de trabalho e o nome da nova planilha que criarei ("H:\NEWMyExcel.xls].[Sheet2]"). Lembrando que esta planilha não pode existir na pasta de trabalho.
[...]
sqlString = "SELECT * INTO [Sheet1] "
sqlString = sqlString & "IN 'H:\NEWMyExcel.xls' 'Excel 8.0;' "
sqlString = sqlString & "FROM [Cotacoes$A2:D100]"
[...]
O exemplo acima é a terceira maneira de executar, não tenho muito a dizer sobre ele, senão que produz o mesmo resultado que os dois anteriores.
Atualize uma planilha existente
Agora, e se você não quer criar uma nova planilha, mas acrescentar dados a uma já existente?
[...]
sqlString = "INSERT INTO [Sheet1$] "
sqlString = sqlString & "IN '' [Excel 8.0;Database=H:\NEWMyExcel.xls] "
sqlString = sqlString & "SELECT * FROM [Cotacoes$A2:D100]"
[...]
Sempre mantenha as 2 aspas simples ('') na instrução SQL.
Outra forma:
[...]
sqlString = "INSERT INTO [Sheet1$] "
sqlString = sqlString & "IN 'H:\NEWMyExcel.xls' 'Excel 8.0;' "
sqlString = sqlString & "SELECT * FROM [Cotacoes$A2:D100]"
[...]
Fonte: http://support.microsoft.com/kb/295646/EN-US
Créditos
Photo by Hitarth Jadhav from Pexels
comments powered by Disqus