Notifications
Clear all

Procv com concatenar no endereço da matriz tabela

14 Posts
1 Usuários
0 Reactions
4,178 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde, sou novo no forum e gostaria de fazer uma pergunta. Estou com um problema em uma planilha, eu preciso utilizar o procv em outras planilhas mas de forma automática.

=CONCATENAR("\serverpasta1pasta2pasta3";DIREITA(AQ18;10);"[Evolução por codigo de parada ";ESQUERDA(AQ18;11);".xls]";ESQUERDA(AQ18;5))
O que me retorna:
\serverpasta1pasta2pasta3linha1[Evolução por codigo de parada linha1.xls]linha
A partir desse endereço, eu gostaria de fazer um procv

=PROCV(AQ17;CONCATENAR("\serverpasta1pasta2Prodpasta3";DIREITA(AQ18;10);"[Evolução por codigo de parada ";ESQUERDA(AQ18;11);".xls]";ESQUERDA(AQ18;5))!B9:L89;4;FALSO)
Essa função me retorna um erro, alguém podia me ajudar?
Agradeço!

 
Postado : 27/06/2011 1:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Augusto, tenta assim:

=PROCV(AQ17;INDIRETO(CONCATENAR("\serverpasta1pasta2Prodpasta3";DIREITA(AQ18;10);"[Evolução por codigo de parada ";ESQUERDA(AQ18;11);".xls]";ESQUERDA(AQ18;5);"!B9:L89"));4;FALSO)

Qualquer coisa da o grito...

 
Postado : 27/06/2011 1:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara a função retornou #REF!
Acho que tem algum problema na hora de colocar as aspas simples, não tenho certeza.

 
Postado : 27/06/2011 1:35 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Vê assim:

=PROCV(AQ17;INDIRETO(CONCATENAR("'\serverpasta1pasta2Prodpasta3";DIREITA(AQ18;10);"[Evolução por codigo de parada ";ESQUERDA(AQ18;11);".xls]";ESQUERDA(AQ18;5);"'!B9:L89"));4;FALSO)

Qualquer coisa da o grito...

 
Postado : 27/06/2011 1:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara não mudou,se eu faço sem a fórmula ele da certo:
=PROCV(AQ17;'\serverpasta1pasta2pasta3pasta4[Evolução por codigo de parada op-45 - 631.xls]op-45'!B9:L89;4;FALSO)
Isso retorna o valor que eu desejo, mas com fórmula ele da erro de referência.
Valeu mais uma vez!

 
Postado : 27/06/2011 1:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Se essa não funcionar, o erro de referência está nas células AQ16 e AQ17.

=PROCV(AQ17;INDIRETO("'\serverpasta1pasta2Prodpasta3"&DIREITA(AQ18;10)&"[Evolução por codigo de parada "&ESQUERDA(AQ18;11)&".xls]"&ESQUERDA(AQ18;5)&"'!B9:L89");4;FALSO)

essas células contém números? zeros à esquerda ficam diferentes com a função direita()/esquerda(), não puxam formatação... transforme em texto antes...

tem como postar um exemplo?

 
Postado : 27/06/2011 1:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

A célula AQ17 contém o texto a ser procurado que é "Manutenção" as fórmulas esquerda e direita servem apenas para criar o endereço da outra planilha, elas estão fazendo certo, pois eu utilizo somente o concatenar em uma célula afastada, faço um hiperlink e ela abre sem problemas, o problema está em na utilização do endereço pelo procv, no passo a passo o procv utiliza o seguinte endereço:
''\serverpasta1pasta2pasta3pasta4[Evolução por codigo de parada op-45 - 631.xls]op-45'!B9:L89'
ele adiciona uma aspa simples no começo e no fim, sendo que esta aspa do fim deveria ser a que está antes do "!".
Ficou mais claro?
Valeu!

 
Postado : 27/06/2011 2:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Outra tentativa Augusto, tenta assim:

=PROCV(AQ17;desloc(indireto("'\serverpasta1pasta2Prodpasta3"&DIREITA(AQ18;10)&"[Evolução por codigo de parada "&ESQUERDA(AQ18;11)&".xls]"&ESQUERDA(AQ18;5)&"'!B9");0;0;80;11);4;FALSO)

Se não funcionar tenta nomear essa fórmula:

=desloc(indireto("'\serverpasta1pasta2Prodpasta3"&DIREITA($AQ$18;10)&"[Evolução por codigo de parada "&ESQUERDA($AQ$18;11)&".xls]"&ESQUERDA($AQ$18;5)&"'!B9");0;0;x;11)

depois usa essa:

=PROCV(AQ17;**fórmula nomeada**;4;FALSO)

Qualquer coisa da o grito...

 
Postado : 27/06/2011 2:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara a função indireto da certo somente quando a planilha onde o procv procura está aberta, quando fecho aparece o #REF, será que tem como driblar esse problema?
Valeu mais uma vez!

 
Postado : 28/06/2011 5:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

vixi...
aí eu já não sei...
=/

mas acredito que não tenha como...

são apenas algumas funções que o Excel aceita fazer o cálculo usando como referencia uma outra planilha fechada...

mas talvez apareça alguém aqui com a solução...

Qualquer coisa da o grito...
Abraço

 
Postado : 28/06/2011 6:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


A função INDIRETO exige que o arquivo esteja aberto ao ser calculada, mas em seguida, não havendo alteração, fica mantida.

Desconheço outra opção com fórmula, mas, outra alternativa seria retornar a base de dados para dentro do arquivo através de VBA..

 
Postado : 28/06/2011 8:11 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok Bernardo,
Muito obrigado mais uma vez!
Vou tentar aqui, se eu achar a resposta eu coloco no forum!

 
Postado : 28/06/2011 2:44 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

As ordens...
;)

Se achar uma solução vai ser de muita valia postar aqui...

Qualquer dúvida, estou a disposição...
Abraço

 
Postado : 28/06/2011 2:47 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Como prometido, eu encontrei um programa em vba chamado pull que faz indireto com arquivos fechados:

Function pull(xref As String) As Variant
Dim xlapp As Object, xlwb As Workbook
Dim b As String, r As Range, c As Range, n As Long
pull = Evaluate(xref)
If CStr(pull) = CStr(CVErr(xlErrRef)) Then
On Error GoTo CleanUp
Set xlapp = CreateObject("Excel.Application")
Set xlwb = xlapp.Workbooks.Add
On Error Resume Next
n = InStr(InStr(1, xref, "]") + 1, xref, "!")
b = Mid(xref, 1, n)
Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1))
If r Is Nothing Then
pull = xlapp.ExecuteExcel4Macro(xref)
Else
For Each c In r
c.Value = xlapp.ExecuteExcel4Macro(b & c.Address(1, 1, xlR1C1))
Next c
pull = r.Value
End If
CleanUp:
If Not xlwb Is Nothing Then xlwb.Close 0
If Not xlapp Is Nothing Then xlapp.Quit
Set xlapp = Nothing
End If
End Function

Para não sobrecarregar, coloquei outro programa que verifica se existe o arquivo antes de procurar:

Public Function ArquivoExiste(ByVal Caminho As String, Optional ByVal SomenteDiretorio As Boolean = False) As Boolean
On Error Resume Next
If SomenteDiretorio Then
ArquivoExiste = GetAttr(Mid(Caminho, 1, InStrRev(Caminho, ""))) And vbDirectory
Else
ArquivoExiste = GetAttr(Caminho)
End If
On Error GoTo 0
End Function

É isso senhores. Obrigado!

 
Postado : 05/07/2011 5:18 am