Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Conexão SQL com Excel (Resolvido)

Dúvidas gerais sobre Excel
Nei Stolberg
Colaborador
Colaborador
Mensagens: 14
Registrado em: Ter Jul 02, 2013 4:25 pm

Conexão SQL com Excel (Resolvido)

Mensagem por Nei Stolberg »

Boa tarde amigos,

Estou tentando fazer uma conexão SQL com uma planilha do excel e trazer um valor específico de uma celula, mas não estou conseguindo escrever a instrução sql, apesar de já ter procurado bastante.

Dim strSQL As String
Origem = "C:\Users\User\Desktop\Nova pasta\FR-054.xls"

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

'abre uma conexão com a planilha do Excel
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Origem & ";" & "Extended Properties=Excel 8.0"
cn.Open

'monta a instrução SQL que irá pegar os dados
strSQL = "SELECT * FROM [IDF$F9] " ' aqui ta a dificuldade, quero pegar o valor da celula F9 que está na pasta IDF.
Set rs = cn.Execute(strSQL)

Range("A1").Value = 'preciso colocar o resultado aqui.

'Fecha RecordSet e Conexão
rs.Close
cn.Close
Exit Sub

Eu já tenho uma rotina que abre cada planilha e pega o valor que quero, mas fica muito demorado esse negócio de abre planilha - fecha planilha.
Me pareceu que com SQL fica mais rápido isso. Ou to enganado?
Mesmo assim queria fazer um teste pra ver o desempenho entre as duas formas.

Pela ajuda obrigado.
Nei.
Editado pela última vez por Nei Stolberg em Seg Jul 08, 2013 1:35 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Conexão SQL com Excel

Mensagem por webmaster »

Neil,
strSQL = "SELECT * FROM [IDF$F9] " ' aqui ta a dificuldade, quero pegar o valor da celula F9 que está na pasta IDF.
Você quis dizer planilha, certo? Se for isso:

Código: Selecionar todos

strSQL = "SELECT * FROM " Sheets("IDF").Range("F9").Value 
Veja se resolve.

Abraços


Nei Stolberg
Colaborador
Colaborador
Mensagens: 14
Registrado em: Ter Jul 02, 2013 4:25 pm

Re: Conexão SQL com Excel

Mensagem por Nei Stolberg »

Olá, obrigado pela respostas...

Colocando a string que você sugeriu dá o seguinte erro:

Erro de compilação
Era esperado: fim da instrução

Eu tentei isso aqui, que encontrei em um site:

strSQL = "SELECT * FROM [IDF$F8:F10]"

Funcionou, mas não entendi porque. E é ruim né cara...quando a coisa funciona e tu não sabe o porque!!!!

Se eu colocar assim strSQL = "SELECT * FROM [IDF$F9]" não funciona.
Assim também não "SELECT * FROM [IDF$F9:F10]"

Se puder me dar uma explicação....agradeço.
Sds,

Nei.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Conexão SQL com Excel

Mensagem por Mikel Silveira Fraga »

Nei Stolberg, boa tarde.

Cara, não sei se seria por isso, mas quando se trabalha com SQL, é necessário que exista uma matriz com mais de um elemento.

Quando você direciona, conforme abaixo, você esta informando uma matriz 1x1, pois esta sendo informado apenas a célula F9.
Nei Stolberg escreveu: strSQL = "SELECT * FROM [IDF$F9]"
No exemplo que você pegou na net, já esta fazendo referência para uma matriz 3x1, pois as células informadas vão do intervalo F8 até F10.
Nei Stolberg escreveu:strSQL = "SELECT * FROM [IDF$F8:F10]"
Agora, o fato de não ter funcionado com a referência de intervalos F9 até F10, somente se existir algum erro de informação, mas também não faço ideia.

Nei, quero ressaltar que essa explicação acima é apenas uma suspeita, mas não posso afimar por concreto.

Se encontrar algo, poste aqui pois até eu fiquei curioso agora.

Abraços.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Nei Stolberg
Colaborador
Colaborador
Mensagens: 14
Registrado em: Ter Jul 02, 2013 4:25 pm

Re: Conexão SQL com Excel

Mensagem por Nei Stolberg »

Mikel,

Obrigado pelos comentário.
Sua teoria faz bastante sentido. Pois fiz uns testes com outras celulas e a string só retorna valores se eu colocar uma matriz de no minino 2x1, no caso do Excel.
O curioso é que (estando o valor que quero na celula F9) assim ele retorna Null: strSQL = "SELECT * FROM [IDF$F9:F10]"
Já assim ele retorna o valor que preciso: strSQL = "SELECT * FROM [IDF$F8:F9]"
E assim também: strSQL = "SELECT * FROM [IDF$F8:F10]"

Talvez tenha algo a ver com o comando Mesclar do Excel, uma vez que as celulas F9, G9, H9, I9 e J9 estão mescladas.

Bom.....um mistério.....pelo menos para mim.
Vou continuar pesquisando...se encontrar algo, posto aqui sim.

Obrigado.
Sds,
Nei.


Nei Stolberg
Colaborador
Colaborador
Mensagens: 14
Registrado em: Ter Jul 02, 2013 4:25 pm

Re: Conexão SQL com Excel (Resolvido)

Mensagem por Nei Stolberg »

Bom galera....

Para finalizar o tópico...gostaria de deixar registrado aqui a seguinte consideração, que já pode ser de conhecimento de muitos, mas creio que vale a pena repetir para quem tá pensando em como resolver isso.
Vejo aqui no Fórum bastante gente precisando acessar informações de uma ou várias planilhas do Excel e transportar esses valores para outros lugares (outro planilha ou até mesmo um outro programa).
Eu mesmo tenho essa necessidade, conforme comentado durante todo este tópico, e afirmo que a melhor forma de fazer isso é usando uma instrução SQL.
Fiz vários testes com vários formatos diferentes de código para entrar no Excel e pegar um valor (ou vários) e sem sombra de dúvidas a maneira mais rápida de se fazer isso é utilizando uma conexão de BD com instrução SQL.
Abrir a planilha via código, colocá-la no formato oculto (porque ninguém quer ver a planilha ou as planilhas serem abertas e fechadas durante a execução do seu código né?) é muito demorada e piora se a planilha conter muita informação, várias pastas de trabalho, figuras ou algum código VBA atrelado a ela.

Fica a dica. Procurem usar conexão de banco para isso. Vocês verão que sua aplicação ficará muito mais rápida para pegar estas informações.

É isso....

Bons códigos a todos...
Sds,
Nei.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder