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:
- Baixe o arquivo Dados.xlsx antes de iniciar o trabalho, os dados deste arquivo serão importados.
- Clique na aba Dados, botão De Outras Fontes -> Do Microsoft Query.
- Na tela selecione Excel Files*.
- Clique em OK, e selecione o arquivo que foi baixado no seu computador.
- Selecione Dados na próxima tela e clique na seta para a direita.
- Clique em Avançar até que apareça o botão Concluir, determine o local como a célula A1 e clique em OK.
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.
- Clique em Ok para fechar a janela.
- Na janela que continuou aberta clique no botão Atualizar->Atualizar Tudo.
- Clique em Fechar.
- Vá para a aba Desenvolvedor e clique em Parar Gravação, você terá criado o código fonte base para a passagem dos parâmetros.
Criando os parâmetros:
- Prepare os campos conforme abaixo, estes servirão para a passagem dos parâmetros:
- Na guia Desenvolvedor clique no botão Visual Basic e no módulo da planilha localize o código gerado pela gravação.
- Neste código digite no topo:
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:
- Salve o código alterado e retorne para a planilha.
- Crie uma forma ao lado dos parâmetros como o nome de Aplicar.
- Clique com o botão direito sobre a forma criada e na opção Atribuir Macro.
- Selecione a macro criada e clique em OK.
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 planilhaAbraço
Marcos Rieper