Notifications
Clear all

Dúvida com PROCV

14 Posts
4 Usuários
0 Reactions
2,408 Visualizações
(@xlarruda)
Posts: 0
New Member
Topic starter
 

Pessoal tenho essa função simples que faz um procv buscando dados na mesma planilha.
O problema é que não estou conseguindo fazer ela puxar os dados de um outro arquivo. Isso é possível?

Detalhe: Toda as vezes que tento referenciar outro arquivo excel, aparece a mensagem: "Sbuscrito fora do intervalo"

Public Function busca_dados(rg As Range)
busca_dados= Application.WorksheetFunction.VLookup(rg, Plan1.Range("E1:F3"), 2, 0)
End Function

Desde já, agradeço...

 
Postado : 13/03/2018 1:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não cheguei a ver seu modelo, download está bloqueado hoje, mas acho que deve estar falando de dois arquivos separados, se for isto de uma olhada neste exemplo que fiz ja ha algum tempo para uma duvida aqui do forum mesmo.

[]s

 
Postado : 13/03/2018 1:44 pm
(@xlarruda)
Posts: 0
New Member
Topic starter
 

Colega Mauro Coutinho Obrigado pelo retorno!
Seria praticamente isso. Porém ao invés de uma Sub queria trazê-la como uma Function. onde eu apenas referenciava uma célula e ele retornava o valor procurado.

Isso porque iria ultilizá-la como um Suplemento para que os demais colaboradores da empresa também pudessem usá-la.

Tipo

A B
1 =achar(A1)

 
Postado : 13/03/2018 1:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Arruda, até onde eu sei, que me corrijam os experts, não é possivel fazer da forma que pretende, teria de ter o outro arquivo aberto, se não me engano este assunto já chegou a ser discutido em alguns foruns, estamos falando em construir uma UDF (Função Definida pelo Usuário), o office teve várias atualizações, mas pelo que já li,na questão do VBA, não teve nenhuma, mas de uma pesquisada no Google por "udf vlookup another workbook without open excel vba" e encontrara vários posts sobre o assunto, quem sabe consegue alguma informação a mais.

Este foi criado em 2008:
Possible to have UDF vlookup from closed workbook?
https://www.mrexcel.com/forum/excel-que ... kbook.html

[]s

 
Postado : 13/03/2018 8:23 pm
(@xlarruda)
Posts: 0
New Member
Topic starter
 

Colega Mauro Coutinho, mais uma vez muito obrigado pela sua resposta!

Realmente pesquisei , e não encontrei nenhuma forma de realizar isso de maneira satisfatória. O mais perto que cheguei foi inserindo meus dados na planilha "PERSONAL.xlsb". (funciona, mas , não é exatamente o que eu precisava).

Mesmo assim, muito obrigado pela sua atenção!

Abrç!

 
Postado : 14/03/2018 5:43 am
(@edsonbr)
Posts: 0
New Member
 

Colega XLArruda boa tarde

Pelo que entendi, vc quer manter uma tabela fixa em um local, que poderia ser numa planilha do próprio suplemento da UDF e usá-la como base da pesquisa, sendo ela o argumento Matriz Tabela da ProcV, sendo que sua UDF rodaria em qualquer pasta de trabalho é isso?

Se for isso é perfeitamente possível (inseri aqui como teste no meu suplemento, que inclusive está em rede e rodou sem problemas):

Estando a tabela já na planilha do suplemento (supondo A1:B4), crie a UDF num módulo no Suplemento e referencie o intervalo qualificando corretamente o Workbook do suplemento. Exemplo:

Public Function busca_dados(rg As Range)
  Dim rgTabela As Range: Set rgTabela = ThisWorkbook.Worksheets(1).Range("A1:B4")
  busca_dados = Application.WorksheetFunction.VLookup(rg, rgTabela, 2, 0)
  Set rgTabela = Nothing
End Function

Aí é só salvar e instalar seu suplemento e usar a UDF busca_dados normalmente.

 
Postado : 14/03/2018 10:50 am
(@xlarruda)
Posts: 0
New Member
Topic starter
 

Olá colega EdsonBR é quase isso.

Pois eu até consegui fazer como você está falando. Muito Obrigado! Deu certo. porém apenas meu computador tem acesso a essa fórmula.
Minha necessidade era de usar como base de dados, um arquivo em pasta compartilhada, para que assim, meu dois colegas de setor também possam usar essa UDF no excel instalado em seus computadores.
Nesse caso, sempre que eu atualizasse o banco de dados (o arquivo da pasta compartilhada) , bastava eles inserirem a fórmula normalmente em suas planilhas que iria funcionar.

Resumindo : A UDF deveria fazer referência ao arquivo que está na pasta compartilhada (banco de dados). Desse forma eu instalaria o suplemento no excel de todos os funcionários do setor. Isso faria com que , sempre que o BD fosse atualizado a função também funcionaria com dados "atualizados" no computador de todos.

Não sei se fui claro.. Abrç!

 
Postado : 14/03/2018 12:11 pm
(@edsonbr)
Posts: 0
New Member
 

... porém apenas meu computador tem acesso a essa fórmula.

Não se o suplemento também estiver em rede, como tenho aqui na empresa. Aí necessitaria 1 suplemento comum para todas as máquinas.

Minha necessidade era de usar como base de dados, um arquivo em pasta compartilhada, para que assim, meu dois colegas de setor também possam usar essa UDF no excel instalado em seus computadores...
...A UDF deveria fazer referência ao arquivo que está na pasta compartilhada (banco de dados). Desse forma eu instalaria o suplemento no excel de todos os funcionários do setor. Isso faria com que , sempre que o BD fosse atualizado a função também funcionaria com dados "atualizados" no computador de todos.

No caso de vc desejar ter essa base de dados num arquivo separado, digamos sua Planilha2.xlsx, há um complicador que é o fato de que esse arquivo já tem que estar aberto para a UDF poder utilizá-lo, como o amigo Mauro Coutinho bem apontou acima. Isto porque procedimentos tipo Function foram desenhados para ler algo e são limitados quando se trata de fazer algo. Métodos como Workbooks.Open são simplesmente ignorados, nem mesmo códigos de erro são gerados.

Resumindo, pra usar a UDF, a Planilha2.xlsx teria que estar já aberta.

Pra não ter que abri-la manualmente sempre que for usar a UDF, vc poderia abri-la sempre que iniciar o Excel e fechá-la ao encerrar o Excel. Para isso, no módulo de Pasta EstaPasta_de_Trabalho do arquivo PERSONAL.XLSB daria pra usar:

Option Explicit
Private Sub Workbook_Open()
   Workbooks.Open Filename:="\ServidorPastaCompartilhadaPlanilha2.xlsx" ', ReadOnly:=True
   Application.Windows("Planilha2.xlsx").Visible = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     Workbooks("Planilha2.xlsx").Close
End Sub

E vc deixaria somente sua UDF no suplemento criado:

Option Explicit
Dim wbTab As Workbook, rgTab As Range

Public Function busca_dados(rg As Range)
   If wbTab Is Nothing Then
     Set wbTab = Workbooks("Planilha2.xlsx")
     Set rgTab = wbTab.Worksheets("Plan1").Range("A1:B4")
   End If
   busca_dados = Application.WorksheetFunction.VLookup(rg, rgTab, 2, 0)
End Function

Obs.:
1) testei aqui e ficou funcional
2) seria bem importante fazer uma boa rotina de tratamento de erros no PERSONAL.XLSB prevendo situações onde o arquivo Planilha2.xlsx tenha sido aberto manualmente ou não ter sido fechado pelo código.

 
Postado : 15/03/2018 12:20 pm
(@xlarruda)
Posts: 0
New Member
Topic starter
 

TOP! TOP! 1000x TOP!!!

Colega EdsonBR Muito Obrigado! É exatamente isso que eu queria.

Dessa forma eu apenas instalo o suplemento nos outros computadores, insiro o código na PERSONAL.xlsb E Pronto! problema RESOLVIDO!

Ficarei acompanhando essa questão dos erros, pois em algum momento imagino que irá acontecer.

Vou testar e qlqr coisa marco como Resolvido. Abrç!

 
Postado : 15/03/2018 12:59 pm
(@xlarruda)
Posts: 0
New Member
Topic starter
 

Blz EdsonBr funcionou perfeitamente..

Apenas um detalhe que não resolvi:

Mesmo a planilha base estando ReadyOnly:= True (apenas leitura), ainda sim ao fechar qualquer arquivo aparece a mensagem:

"Deseja salvar as alterações feitas em "banco de dados"? sim / nao

Eu gostaria que ele fechasse direto, sem essa mensagem, até porque não fiz alteração nenhuma, apenas consultei os dados dela através da minha função.

Se conseguir achar uma solução para isso ficarei muito grato. Abrç!

o código:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     Workbooks("Planilha2.xlsx").Close
End Sub
 
Postado : 15/03/2018 2:35 pm
(@edsonbr)
Posts: 0
New Member
 

Pois é, amigo
Também tinha percebido e fiquei p. da vida com o Excel nesse quesito :x

Tentei:

  • Abrir como somente leitura ReadOnly:= True[/*:m:11q8dkz2]
  • Fechar com opção SaveChanges:=False[/*:m:11q8dkz2]
  • Desabilitar alertas: DisplayAlerts = False[/*:m:11q8dkz2]
  • Fazer o Excel pensar que o arquivo já estava salvo antes de fechar: Workbooks("Planilha2.xlsx").Saved = True[/*:m:11q8dkz2]
  • Fiz até mesmo o Excel Salvar o arquivo antes de fechar SaveChanges:=True e também Workbooks("Planilha2.xlsx").Save[/*:m:11q8dkz2]
  • Uma combinação de vários das tentativas acima tanto tornando o arquivo visível antes como não visível[/*:m:11q8dkz2][/list:u:11q8dkz2]
  • E ainda assim aparece a p. da mensagem!

    Talvez algum colega dê alguma luz no assunto...

     
Postado : 15/03/2018 2:50 pm
(@xlarruda)
Posts: 0
New Member
Topic starter
 

kk tá certo! mas já está ótimo. Você me ajudou e Muito!
O tempo que vou economizar com consultas manuais à outras tabelas já valeu a pena!!!
Abrç!

 
Postado : 15/03/2018 2:54 pm
(@teleguiado)
Posts: 0
New Member
 

Uma coisa que já reparei no excel toda vez que mexe no arquivo personal ele sempre pergunta se deseja salvar as alterações. Pode ter somente a janela do excel aberta sem nenhuma pasta aberta.

 
Postado : 15/03/2018 4:06 pm
(@edsonbr)
Posts: 0
New Member
 

Uma coisa que já reparei no excel toda vez que mexe no arquivo personal ele sempre pergunta se deseja salvar as alterações. Pode ter somente a janela do excel aberta sem nenhuma pasta aberta.

Sim, parece que o Excel é exageradamente conservador quando se trata desse arquivo.

 
Postado : 15/03/2018 4:20 pm