Consulta a Dados Externos Excel com Parâmetros

Objetivo: Consultar dados externos com parâmetros no Excel.

Hoje eu li na comunidade Office Excel 2007 um tópico sobre o union de tabelas, realmente interessante que trabalhava com importação de dados externos.

Isso me fez lembrar de um problema apresentado pelo meu amigo Ivan, então este artigo é dedicado a ele.

Com base nisso, resolvi criar uma consulta a dados externos utilizando parâmetros dentro da planilha, e que ficou com um resultado legal.

Criando a Importação de dados:

Escolher fonte de dados
Escolher fonte de dados
Dados
Tabela de dados importados

Criando o código fonte:

  • Clique na guia Desenvolvedor e no botão Gravar Macro, iremos criar uma macro com o código pronto de uma alteração e atualização da importação, neste passo você pode ter mais informações sobre gravação de macros no artigo Como Gravar Macro no Excel.
  • Clique na guia Dados e em seguida em Conexões, selecione a consulta criada e clique no botão Propriedades.
  • Clique na guia Definição apague seu conteúdo e digite no campo Texto de Comando: SELECT * FROM DADOS.
Propriedades da Conexão

Criando os parâmetros:

Parâmetros
Dim lSql As String
If Range(“J1”).Value = “” Then
lSql = “SELECT * FROM DADOS WHERE ” & _
“Data BETWEEN #” & Range(“J2”).Value & “# AND #” & Range(“J3”).Value & “#”
Else
lSql = “SELECT * FROM DADOS WHERE Vendedor = ” & “‘” & Range(“J1”).Value & _
“‘ And Data BETWEEN #” & Range(“J2”).Value & “# AND #” & Range(“J3”).Value & “#”
End If

Este código fonte acima em SQL está selecionando os dados quando for um determinado vendedor e quando a data estiver entre a data inicial e a final, inclusive. Depois você deve passar a variável lSql para o lugar .CommandText = Array(…. que você encontrará no código fonte abaixo. O código ficará conforme abaixo:

Sub Atualiza()

    Dim lSql As String
    
    If Range("J1").Value = "" Then
        lSql = "SELECT * FROM DADOS WHERE " & _
               "Data BETWEEN #" & Range("J2").Value & "# AND #" & Range("J3").Value & "#"
    Else
        lSql = "SELECT * FROM DADOS WHERE Vendedor = " & "'" & Range("J1").Value & _
               "' And Data BETWEEN #" & Range("J2").Value & "# AND #" & Range("J3").Value & "#"
    End If

    With ActiveWorkbook.Connections("Consulta de Excel Files").ODBCConnection
        .BackgroundQuery = True
        .CommandText = Array(lSql)
        .CommandType = xlCmdSql
        .Connection = Array(Array( _
        "ODBC;DSN=Excel Files;DBQ=C:\Excel\Blog Rieper Excel\Importação de Dados com Parâmetros\Dados.xlsx;DefaultDir=C:\Excel\Blog Rieper Ex" _
        ), Array( _
        "cel\Importação de Dados com Parâmetros;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;" _
        ))
        .RefreshOnFileOpen = False
        .SavePassword = False
        .SourceConnectionFile = ""
        .SourceDataFile = ""
        .ServerCredentialsMethod = xlCredentialsMethodIntegrated
        .AlwaysUseConnectionFile = False
    End With
    With ActiveWorkbook.Connections("Consulta de Excel Files")
        .Name = "Consulta de Excel Files"
        .Description = ""
    End With
    ActiveWorkbook.Connections("Consulta de Excel Files").Refresh
    ActiveWorkbook.RefreshAll
End Sub

Finalizando:

Botão

Pronto!, agora você deve digitar o nome do vendedor na célula I1, e o período inicial e final que devem ser retornados na importação de dados, e você terá estas informações filtradas pelos parâmetros.

Então é isso, muito obrigado pela leitura, mandem sugestões, dicas e dúvidas para o blog, ficarei feliz em ajudar.

Baixe a planilha

Abraço

Marcos Rieper

Sair da versão mobile