Ir ao conteúdo
  • Cadastre-se
Crafteribanez

Excel RESOLVIDO Excel VBA SQL Where com dados da tabela

Recommended Posts

Bom dia

 

Uma dúvida que não sei se é possível.

 

Tenho um código SQL em Excel que lê dados de uma tabela e e coloca os dados em outra.

Perfeito se não fosse o fato de colar todos os dados.

O que quero fazer ?

Na cláusula de pesquisa Where da SQL quero colocar um código de produto.

Más não é só um código.

O usuário em uma Sheet "Planilha" específica do Excel tipo "Plan3" vai ir digitando os códigos que quer filtrar no relatório.

Vou colocar um cabeçalho na primeira coluna "A1" da Plan3 escrito " Código" e aí o usuário nas linhas A2, A3 e assim por diante vai colocando os códigos que ele quer filtrar.

Gostaria de passar esta tabela/coluna "Plan3/A" como parâmetro para a cláusula Where da SQL. Seria tecnicamente um Where de uma Range.

Assim o resultado seria a pesquisa Where de todos os códigos constantes na coluna A da Tabela Plan3.

Tem como fazer isto ?

 

Código que tenho e funciona perfeito para todos os dados.

Sub SQLBusca()

    Application.ScreenUpdating = False
    
    On Error GoTo SQLSEMRETORNO
    
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sql As String    
    Dim ws As Worksheet 
    
    Set ws = Worksheets("DESCARREGAR")
    
    ws.Activate
    Range("A:M").Select
    Selection.Clear
    
    Set cn = New ADODB.Connection
    
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = ThisWorkbook.FullName
        .Properties("Extended Properties") = "Excel 8.0;HDR=YES"
        .Open
    End With
    
    sql = "Select * from [P0100_UniaoGeral$] WHERE CODIGO ????"

    Set rs = New ADODB.Recordset
    rs.Open sql, cn, adOpenKeyset, adLockOptimistic, adCmdText
    
    Application.ScreenUpdating = True
    
    ws.Activate
    
    Application.ScreenUpdating = False
   
    Range("A2").CopyFromRecordset rs
    
    Cells.Select
    Selection.RowHeight = 15
    
    For x = 1 To rs.Fields.Count

        Cells(1, x) = rs.Fields(x - 1).Name

    Next x
    
    Application.ScreenUpdating = True
    
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    Exit Sub
    
SQLSEMRETORNO:

    MsgBox "A consulta não gera nenhum resultado"
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    
    Application.ScreenUpdating = True
    
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido.

 

Utilizei um laço for each na tabela e coloquei todos os valores em uma variável, a qual busquei na SQL.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×