Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Conexão SQL com Excel (Resolvido)
-
- Colaborador
- Mensagens: 14
- Registrado em: Ter Jul 02, 2013 4:25 pm
Conexão SQL com Excel (Resolvido)
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.
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.
Re: Conexão SQL com Excel
Neil,
Veja se resolve.
Abraços
Você quis dizer planilha, certo? Se for isso:strSQL = "SELECT * FROM [IDF$F9] " ' aqui ta a dificuldade, quero pegar o valor da celula F9 que está na pasta IDF.
Código: Selecionar todos
strSQL = "SELECT * FROM " Sheets("IDF").Range("F9").Value
Abraços
-
- Colaborador
- Mensagens: 14
- Registrado em: Ter Jul 02, 2013 4:25 pm
Re: Conexão SQL com Excel
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.
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.
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Conexão SQL com Excel
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, 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.
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.
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$F9]"
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 Stolberg escreveu:strSQL = "SELECT * FROM [IDF$F8:F10]"
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.
-
- Colaborador
- Mensagens: 14
- Registrado em: Ter Jul 02, 2013 4:25 pm
Re: Conexão SQL com Excel
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.
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.
-
- Colaborador
- Mensagens: 14
- Registrado em: Ter Jul 02, 2013 4:25 pm
Re: Conexão SQL com Excel (Resolvido)
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.
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.