Este fórum foi descontinuado. LEIA AQUI e participe da Comunidade BABOO :)

Ir para conteúdo
jairo.mandelbaum

Funçao para fazer referencia a pasta de trabalho fechada

Mensagem Recomendada

Estou tentando fazer uma função do excel em VB parecida com a função INDIRETO mas que se refere a uma pasta de trabalho fechada. Alguém sabe como fazer isso?


 


Por enquanto o meu código está com abaixo:


 


Function StrRange(intervalo As String, Optional plan As String,Optional wb As String)

If wb = "" Then
  If plan = "" Then
  Set StrRange = ActiveSheet.Range(intervalo)
  Else
  Set StrRange = Worksheets(plan).Range(intervalo)
  End If
Else

  Set StrRange = Workbooks(wb).Worksheets(plan).Range(intervalo)
End If



End Function

Ela funciona com worbooks abertos mas eu não consigo fazer
referência a Workbooks fechados (criar um vínculo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o VBA só funciona em uma instância do Excel. Tanto que quando você usa o gravador de macros, e grava uma macro para funcionar em todas as pastas de trabalhos, ele grava em uma pasta chamada "pessoal.xls" e esta pasta é carregada toda vez que se abre o excel, mas de forma oculta. Para visazlizá-la, você tem que ir em Janela, Reexibir.


Por isso, eu até posso estar errado, mas acredito que esse código seu realmente não vai funcionar. Você terá de abrir essa pasta, mesmo que oculta.


"A diferença entre o computador e a mulher é que o computador vem com manual!!!" Rafael Siqueira Bernardi

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei se você entendeu direto minha pergunta.O que eu quero saber não é como utilizar essa função em todas as pastas de trabalho que por sinal acho uma melhor solução salvar como add in. O que eu quero é saber um código para criar vínculo com uma pastade trabalho fechada.


Mesmo assim obrigado pela resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usar o getObject, é como se ele abrisse o arquivo só que de modo oculto, aí você pode manipular, e depois fecha o arquivo


set pasta = getObject("c:diretóriopasta.xls")


pasta.activesheet.range("a1") = "Olá mundo"


pasta.close ''ou pasta.application.quit para fechar todo o excel


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que eu quero usar isso como função diretamente na planilha e não criar uma macro. Dessa forma não da para usar como função. Não exite algum código para criar vínculos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Jairo


você so explanou de forma errada. O que você quer é a chamada Função definida pelo usuário e deseja  que ao abrir um Arquivo novo a função seja disponibilizada novamente. Isto já torna uma Função  Public Function() numa Função Suplementar


 


Vamos aos passos:


Num módulo padrão, na janela do VBA, digite os procedimentos Sub e/ou Function que você desejar.


No menu Arquivo selecione a opção Salvar como.
Em Salvar como tipo, selecione a opção: "Suplemento do Microsoft Office Excel (*.xla)".
Clique no botão Salvar.
Na janela do VBA, de um duplo clique em EstaPasta_de_trabalho (ThisWorkbook).
Altere o item IsAddin para True e clique no botão Salvar.


Observe que, na janela do Excel, você não verá as planilhas.
Pois agora, seu arquivo transformou-se em um suplemento.


Para que o suplemento fique disponivel para todas as pastas de trabalho de sua máquina, abra o Excel e, no menu Ferramentas / Suplementos, ative o suplemento que você acabou de criar.


Para que o suplemento fique disponivel em outras máquinas, você deverá copiar o suplemento em questão para as outras máquinas e fazer a ativação do mesmo.



" A maior Riqueza do Homem e o seu Conhecimento e sua Sabedoria e isto ninguém tira ,mas podemos dividi-la" - " A cada dia que passa descobri que Só sei que nada Sei"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vocês não estão entendendo. A função INDIRETO do excel não funciona para uma range em outra pasta de trabalho que esteja fechada. Eu queria desenvolver uma função que fizesse a mesma coisa que INDIRETO mas funcionasse para pastas de trabalho fechadas. Mas pelo que percebi não deve dar porque ninguém em nenhum fórum conseguiu resolver isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 


A função Indireto funciona para Pastas Fechadas........mas você na hora de Formular necessita dela aberta


=INDIRETO('D:Documents and SettingsGSMMeus documentosaleatoriosaa1[pesq2.xls]Plan1'!$C$9)


ao Fechar a Pasta aparecerá o endereço de onde foi buscada a informação.


Quando Abrir o Arquivo o Excel ira dar um Aviso para renovar o vínculo com a outra fechada


Esta é uma operação como Qualquer Outra


Abra dois arquivos diferentes. coloque o sinal de = dentro de uma célula e abra o arquivo seguinte e clique em qualquer célula de Enter. Feito o vínculo Feche o arquivo. Aparecerá na fórmula o endereço completo.


Qual a sua dificuldade????


Use o assistente de macro.......ele esta habilitado para realizar esta função......depois veja a macro  e complemente sua função.


Sub Macro1()
 
  ActiveCell.Formula = "=INDIRECT([pesq2.xls]Plan1!$C$9)"
 
End Sub



" A maior Riqueza do Homem e o seu Conhecimento e sua Sabedoria e isto ninguém tira ,mas podemos dividi-la" - " A cada dia que passa descobri que Só sei que nada Sei"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá quase.


O que eu quero fazer é que o argumento da função indireto seja uma string para outra pasta, por exemplo:


=INDIRETO("''D:Documents and SettingsGSMMeus documentosaleatoriosaa1[pesq2.xls]Plan1''!" & $C$9)


Observe as aspas duplas transformando o seu argumento em string. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ora, é só escrever em string, não vejo dificuldade nisso. Bom, se tu queres a pasta no qual a planilha está, use a função Cél. Ex: Cél("filename") ->Retorna o caminho completo da planilha, com a pasta


Cél("Address";C6) -> retorna $C$6


Daí junte os dois e forme sua string, colocando na função indireto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos explicar passo a passo o que eu quero fazer. Não é tão simples quanto eu imaginava observando a dificuldade para vocês entenderem o problema:


 


Eu tenho duas pastas de trabalho nos seguintes endereços C:ExcelDados e C:MeusDocumentosMeses.


Até aqui entenderam?


Na pasta meses tenho 12 planilhas com os nomes dos meses (Janeiro, Fevereiro, etc.)


Eu quero puxar para uma mesma planlha da pasta dados os dados dessas diferentes planilhas da pasta meses


Eu poderia colocar em cada cèlula as fórmulas =''C:MeusDocumentos[Meses.xls]Janeiro''!A1


  =''C:MeusDocumentos[Meses.xls]Fevereiro''!A1


E assim por diante mas eu preferia colocar na coluna A a partir de A1 o nome dos meses e fazer da seguinte forma


=indireto("''C:MeusDocumentos[Meses.xls]Fevereiro''!" & A1) e autocompletar a cèlulas seguintes com


=indireto("''C:MeusDocumentos[Meses.xls]Fevereiro''!" & A2)


 


isso dá certo se eu abrir a pasta de trabalho Meses mas se eu fecho da erro #REF!


Deu para entender agora meu problema? Vocês acreditam que há uma soluçáo? Eu desafio vocês a encontrarem uma soluçao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jairo.........você deseja salvar uma planilha inteira(todas a células uma a uma) e jogar numa Planilha do arquivo Dados. Não necessita desta função INDIRETO()


Daí e mais Fácil Copiar e Colar abrindo o arquivo Dados.Ou copiar e colar especial (Valores) sem fórmulas


Mas sempre que você abrir irá pedir para renovar o vínculo com a pasta fechada aí você abre e pode fecha-la novamente? Isto porque você depende de dados de outro arquivo e lá se esta em REDE ......poderia ter sido modificado ,então sempre ocorrerá isto. A função é dependente de vínculo e necessita de atualização.


 Supor abrir um Arquivo


Sub Balancete()

'ABRIR PLAN TESTE


Range("D16").Select
ChDir "d:Documents and SettingsGSMMeus documentosaleatoriosDominio Publico"
  Workbooks.Open Filename:= _
  "d:Documents and SettingsGSMMeus documentosaleatoriosDominio PublicoTESTE.xls"

'cria uma nova pasta de trabalho
Set wbn = Workbooks.Add(xlWBATWorksheet)
Set wsr = wbn.Worksheets(1)
wsr.Name = "DADOS"


'Despesas
Workbooks("teste").Worksheets("Despesas").Range("c3:C65536").Copy Destination:=Worksheets("DADOS").Range("a3:a65536")
Workbooks("teste").Worksheets("Despesas").Range("h3:h65536").Copy Destination:=Worksheets("DADOS").Range("b3:b65536")


'Receitas
Workbooks("teste").Worksheets("Receitas").Range("c3:c65536").Copy Destination:=Worksheets("DADOS").Range("d3:.d65536")
Workbooks("teste").Worksheets("Receitas").Range("h3:h65536").Copy Destination:=Worksheets("DADOS").Range("e3:e65536")


End Sub


" A maior Riqueza do Homem e o seu Conhecimento e sua Sabedoria e isto ninguém tira ,mas podemos dividi-la" - " A cada dia que passa descobri que Só sei que nada Sei"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×
×
  • Criar Novo...