Ir ao conteúdo

Excel Consultar Acces pelo Excel


Ir à solução Resolvido por Basole,

Posts recomendados

Postado

Boa Tarde,

 

sou novo por aqui, então por favor se já houver algo relacionado me auxilie pois não encontrei exatamente o que preciso.

 

Tenho uma planilha onde eu faço todo o controle dos veículos da empresa, e toda minha base de dados está no Acces. ( para onde quero migrar )

tenho um ProcV em umas das células onde ele consulta uma planilha onde estão esses dados. Pela placa ele me retorna quem é o motorista, e o CPF do mesmo.

Eu preciso saber agora COMO EU FAÇO ESSE PROCV IR BUSCAR LÁ NO ACCES? Para eu poder apagar essa base que está em outra planilha excel.

Postado

crie uma aba para consulta onde o excel irá importar a tabela com os dados do access (vá em dados/obter dados no excel) configure a consulta (de preferência mantenha somente os valores excenciais para a sua formula), ajuste a formula e oculte a aba.

Postado
28 minutos atrás, Eder Neumann disse:

crie uma aba para consulta onde o excel irá importar a tabela com os dados do access (vá em dados/obter dados no excel) configure a consulta (de preferência mantenha somente os valores excenciais para a sua formula), ajuste a formula e oculte a aba.

vai ser o mesmo procv só que dentro da mesma planilha? Mas e a conexão com o Acces ?

Postado

@marcelo costa Jr segue exemplo basico de busca de dados dentro de banco de dados access

 

Sub PROCV_IN_TABELA_ACCESS()
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = ThisWorkbook.Path & "\AQUI NOME DO BANCO DE DADOS ACCESS E A EXTENSAO"
s_Placa = "Aqui_dados_da_Placa" 'ou a celula que contem a placa
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [NOME_DA_SUA_TABELA] "
       sql = sql & "WHERE [CAMPO_PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    While Not rs.EOF
     
       MsgBox rs![NOME DO CAMPO MOTORISTA] & VBA.vbNewLine & _
              rs![NOME DO CAMPO CPF]
         
         rs.MoveNext
    Wend


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Sub

* OBS: Alteracoes que devem ser feitas no codigo de acordo com os seus dados:

  

Path = ThisWorkbook.Path & "\AQUI NOME DO BANCO DE DADOS ACCESS E A EXTENSAO"

     * coloque o endereco do seu banco, nome e extensao

Altere de acordo com os dados da tabela do access: [NOME_DA_SUA_TABELA], [CAMPO_PLACA], [NOME DO CAMPO MOTORISTA], [NOME DO CAMPO CPF]

          

 

 

  • Obrigado 1
Postado
7 minutos atrás, Basole disse:

@marcelo costa Jr segue exemplo basico de busca de dados dentro de banco de dados access

 


Sub PROCV_IN_TABELA_ACCESS()
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = ThisWorkbook.Path & "\AQUI NOME DO BANCO DE DADOS ACCESS E A EXTENSAO"
s_Placa = "Aqui_dados_da_Placa" 'ou a celula que contem a placa
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [NOME_DA_SUA_TABELA] "
       sql = sql & "WHERE [CAMPO_PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    While Not rs.EOF
     
       MsgBox rs![NOME DO CAMPO MOTORISTA] & VBA.vbNewLine & _
              rs![NOME DO CAMPO CPF]
         
         rs.MoveNext
    Wend


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Sub

* OBS: Alteracoes que devem ser feitas no codigo de acordo com os seus dados:

  

Path = ThisWorkbook.Path & "\AQUI NOME DO BANCO DE DADOS ACCESS E A EXTENSAO"

     * coloque o endereco do seu banco, nome e extensao

Altere de acordo com os dados da tabela do access: [NOME_DA_SUA_TABELA], [CAMPO_PLACA], [NOME DO CAMPO MOTORISTA], [NOME DO CAMPO CPF]

          

 

 

[CAMPO_PLACA], [NOME DO CAMPO MOTORISTA], [NOME DO CAMPO CPF] =  coluna  B, C & D. Só coloco B, C, D ?

Capturar.JPG

Postado
4 minutos atrás, marcelo costa Jr disse:

vai ser o mesmo procv só que dentro da mesma planilha? Mas e a conexão com o Acces ?

 

33 minutos atrás, Eder Neumann disse:

vá em dados/obter dados

dai selecione dados do access e encontre o arquivo do seu BD

Postado

@Basole

7 minutos atrás, Eder Neumann disse:

 

dai selecione dados do access e encontre o arquivo do seu BD

E MINHA FÓRMULA QUE HOJE ESTÁ

 =SEERRO(PROCV(@B$8:B$67;'C:\Users\luizjunior\Desktop\[dados.xlsx]Dados'!$A$2:B$10900;2;FALSO);"-")

 ...

VAI FICAR COMO A CONSULTA ?

 

adicionado 9 minutos depois

@Basole

Capturar2.JPG

Capturar.JPG

Postado
18 minutos atrás, marcelo costa Jr disse:

E FÓRMULA QUE HOJE ESTÁ

 =SEERRO(PROCV(@B$8:B$67;'C:\Users\luizjunior\Desktop\[dados.xlsx]Dados'!$A$2:B$10900;2;FALSO);"-")

 VAI FICAR COMO A CONSULTA ?

 

@marcelo costa Jr de acordo com a imagem do seu banco de dados access, fica desta forma a consulta:

 

Sub PROCV_IN_TABELA_ACCESS()
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"
s_Placa = "DADOS DA PLACA" '* ou a celula que contem a placa
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    While Not rs.EOF
     
       MsgBox rs![MOTORISTA] & VBA.vbNewLine & _
              rs![C#P#F# motorista]
         
         rs.MoveNext
    Wend


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Sub

 

Postado

@Basole @Basole @Basole Ai na imagem que enviei anteriormente, quando eu digito a placa no campo " CAVALO " aparece o Motorista e o Cpf do mesmo, onde tem a fórmula  =SEERRO(PROCV(@B$8:B$67;'C:\Users\luizjunior\Desktop\[dados.xlsx]Dados'!$A$2:B$10900;2;FALSO);"-")  no campo [ MOTORISTA /  CPF ] como ficaria essa fórmula agora com a consulta no Acces?

Postado

 

@marcelo costa Jr 

Nao sei o que significa campo CAVALO, pois na imagem nao vi nada relacionado.

 

Eu postei um exemplo simples de consulta ao banco access, mas se pretende adaptar a sua planilha, seu cenário, preciso que disponibilize exemplos dos seus arquivos para tentarmos adaptar a sua situacao, pois o exemplo de codigo generico, nao atende a todas as demandas.

 

De quaquer forma ajustei o codigo a uma funcao (udf)

 

* Para testar cole o codigo abaixo em um modulo  e em qualquer célula coloque, por exemplo =PROCV_ACCESS(A1)

 

Function PROCV_ACCESS(rng As Range) As String
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"

s_Placa = rng.Value2
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    While Not rs.EOF
     
       PROCV_ACCESS = rs![MOTORISTA] & "; " & _
              rs![C#P#F# motorista]
         
         rs.MoveNext
    Wend


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Function

 

 

 

 

  • Curtir 1
Postado
7 minutos atrás, Basole disse:

@marcelo costa Jr sua tabela Dados.xlsx esta vinculada ao banco de dados BD_placas.accdb sendo assim nao tenho como acessar os dados.

 

Disponibilize o arquivo Dados.xlsx para eu tentar importar para o access.

 

 

o que está no Acces já esta importado .. mas de qualquer forma está feito, já upei!

  • Solução
Postado

@marcelo costa Jr apenas vinculado. Segue os arquivos ajustados a funcao 

 

Para retornar o motorista use =PROCV_ACCESS(Celula;FALSO);e para retornar o CPF PROCV_ACCESS(Celula;VERDADEIRO)

image.png.05895d44d88141769aacc6b5bb282eb7.png

 

             image.png.55a2eb167464ee7030fdcebda1dfe8e5.png

Spoiler

Function PROCV_ACCESS(rng As Range, Optional Cpf As Boolean) As String
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"

s_Placa = rng.Value2
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    If Not rs.EOF Then
    
     If Cpf = False Then
       PROCV_ACCESS = rs![MOTORISTA]
     Else
       PROCV_ACCESS = rs![CPF motorista]
     End If
        
    End If


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Function

 

Segue os arquivos, e o BD com os dados importados: https://1drv.ms/u/s!AklQQunG_lmmg0sXEdNheA2Ugyjt?e=ncrJl9

 

  • Curtir 1
  • Obrigado 1
Postado
14 horas atrás, Basole disse:

@marcelo costa Jr apenas vinculado. Segue os arquivos ajustados a funcao 

 

Para retornar o motorista use =PROCV_ACCESS(Celula;FALSO);e para retornar o CPF PROCV_ACCESS(Celula;VERDADEIRO)

image.png.05895d44d88141769aacc6b5bb282eb7.png

 

             image.png.55a2eb167464ee7030fdcebda1dfe8e5.png

  Mostrar conteúdo oculto

Function PROCV_ACCESS(rng As Range, Optional Cpf As Boolean) As String
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"

s_Placa = rng.Value2
  
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    If Not rs.EOF Then
    
     If Cpf = False Then
       PROCV_ACCESS = rs![MOTORISTA]
     Else
       PROCV_ACCESS = rs![CPF motorista]
     End If
        
    End If


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Function

 

Segue os arquivos, e o BD com os dados importados: https://1drv.ms/u/s!AklQQunG_lmmg0sXEdNheA2Ugyjt?e=ncrJl9

 

FUNCIONOU! muito obrigado!

  • 10 meses depois...
Postado

Me ajudou muito este exemplo, ficou uma questão.

 

É possivel puxar mais campos do banco de dados?

 Exemplo:

Em uma celula A1 eu digido o "codigo" e na B1 ele coloca a descrição na C1 o valor na D1 a quantidade...

 

Pode utilizar o mesmo código do problema anterior só sinaliza o que preciso adicionar.

 

Agradeço muito!!!

Postado

Aproveitando o exemplo acima, segue as adaptacoes:

 

     PROCV_ACCESS( Celula; Numero )

 

Use os parametros :

     1 para retornar a descricao

     2 para retornar o valor

     3 para retornar a quantidade

<code>

Function PROCV_ACCESS(rng As Range, Optional Cpf As Single) As String
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"
s_Placa = rng.Value2
 
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    If Not rs.EOF Then
         
     Select Case Cpf
            Case Is = 1
              PROCV_ACCESS = rs![MOTORISTA]
            Case Is = 2
              PROCV_ACCESS = rs![CPF motorista]
            Case Is = 3
              PROCV_ACCESS = rs![Filial]
     End Select
   
   
    End If


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Function

</code>

  • Curtir 2
Postado
Em 16/01/2021 às 01:08, Basole disse:

Aproveitando o exemplo acima, segue as adaptacoes:

 

     PROCV_ACCESS( Celula; Numero )

 

Use os parametros :

     1 para retornar a descricao

     2 para retornar o valor

     3 para retornar a quantidade

<code>

Function PROCV_ACCESS(rng As Range, Optional Cpf As Single) As String
Dim sql         As String
Dim db          As Object
Dim rs          As Object
Dim Path        As String
Dim s_Placa     As String

Set db = VBA.CreateObject("ADODB.Connection")
Set rs = VBA.CreateObject("ADODB.Recordset")

Path = "C:\Users\luizjunior\Documents\BD_placas.accdb"
s_Placa = rng.Value2
 
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";"
           
      On Error GoTo trat_err
      
       sql = "SELECT * "
       sql = sql & "FROM [Dados] "
       sql = sql & "WHERE [PLACA]='" & s_Placa & "'"
              
       rs.Open sql, db, 3, 3
       
       
    If Not rs.EOF Then
         
     Select Case Cpf
            Case Is = 1
              PROCV_ACCESS = rs![MOTORISTA]
            Case Is = 2
              PROCV_ACCESS = rs![CPF motorista]
            Case Is = 3
              PROCV_ACCESS = rs![Filial]
     End Select
   
   
    End If


trat_err:

 db.Close: Set db = Nothing
  Set rs = Nothing

End Function

</code>

Perfeito

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!