Estou muito confuso depois de tentar explorar como isso pode ser feito. É muito simples, mas ainda não consigo encontrar uma solução.
O que eu gostaria de saber é o seguinte. Tenho três documentos separados, todos vinculados até certo ponto; os dados são inseridos a partir de um documento (1. entrada mestre) e resumidos nas três planilhas.
Cada documento é apresentado de forma idêntica, os únicos fatores variáveis são as datas e para a entrada mestre, temos valores numéricos.
Em forma de ilustração fica assim:
a. 1 Entrada mestre --> (alimenta em) 2,3 b. 2 --> (alimenta) 3 e 4 c. 3 -> (alimenta) 4
O que eu gostaria de saber é que nos documentos 2,3 e 4... os dados mudam a cada ano. Tenho muitos 'hiperlinks' da planilha como exemplo:
2015 =" \Receita Diária\2015[Receita 2015.xls]Resumo do Ano'!$C$160"
2016 =" \Receita Diária\2016[Receita 2016.xls]Resumo do Ano'!$C$160"
2017 =" \Receita diária\2017[Receita 2017.xls]Resumo do ano'!$C$160"
Do exposto acima, a única variável que preciso alterar é o ano, existe algum código/macro etc. que eu possa usar para substituir oANOdentro do hiperlink. Considere em mente que o caminho do arquivo serásemprepermanece o mesmo.
Estou plenamente consciente doencontrar e substituirfunção, no entanto, desejo torná-la amigável e fácil.
Por favor me ajude, obrigado!
Responder1
Em primeiro lugar, você continua falando sobre hiperlinks. Acho que você quer dizer fórmulas que fazem referência a outros arquivos. Esses não são hiperlinks. Aqui está a solução se o que você realmente quis dizer foram hiperlinks:
Para responder à sua pergunta real: Sim, existe uma macro para isso. Claro. Acho que o que você precisa saber é o Worksheet.Hyperlinks
objeto. Você pode percorrer cada hiperlink em cada planilha e substituir o endereço pelo que desejar. Aqui está um exemplo de trecho:
Sub ChangeHyperlinks()
Dim ws As Worksheet
Dim hyp As Hyperlink
For Each hyp In ws.Hyperlinks
hyp.Address = Replace(hyp.Address, "2015", "2016")
Next
End Sub
Você terá que modificá-lo se não quiser mudartodohiperlink adicionando instruções condicionais como If InStr(1, hyp.Address, "\Daily Revenue\2015") Then
. Você pode usar o Workbook_Open
evento para ser executado sempre que o arquivo for aberto, pegar o ano certo com base no nome do arquivo e, em seguida, executar a substituição dos hiperlinks. Sim, isso iria disparartodomomento em que o arquivo é aberto, mesmo que já esteja correto. Dependendo de quantos hiperlinks você tem, isso pode ser bom ou pode paralisar tudo.
E aqui está um trecho de código se o que você realmente quis dizer foram fórmulas. Novamente, você terá que adaptá-lo mais às suas necessidades, mas isso deve ajudá-lo a começar.
Private Sub Workbook_Open()
Dim i As Integer
Dim srcArray As Variant
srcArray = ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)
For i = 1 To UBound(srcArray)
Debug.Print srcArray(i)
ThisWorkbook.ChangeLink srcArray(i), Replace(srcArray(i), "2015", "2016")
Next
End Sub
Além disso, se você quis dizer fórmulas, sua pergunta é uma duplicata deStackOverflow.
Responder2
Existem algumas ambigüidades em sua pergunta. Esta resposta pressupõe que você esteja falando sobre referências de células em outras pastas de trabalho, conforme ilustrado em seus exemplos, em vez de hiperlinks, e que a tarefa é configurar as referências ajustáveis por ano, em vez de reescrever todas as fórmulas a cada ano.
Primeiro, você precisa de uma referência de ano em algum lugar. Não está claro quando ou de que maneira você deseja que o ano mude (automaticamente em 1º de janeiro de cada ano? Em uma data de sua escolha? Você deseja alterar o ano a qualquer momento?). Então, basearei isso em uma solução genérica. Escolha uma célula para conter a referência do ano. No meu exemplo, usarei a célula Z1
da planilha que contém as referências de células no seu exemplo. Se você quiser alterar o ano à vontade ou em uma data de sua escolha, basta inserir Z1
o ano de quatro dígitos. Se você quiser que o ano mude automaticamente em 1º de janeiro, use =YEAR(TODAY())
.
Então, em vez de codificar o ano em cada fórmula, concatene uma referência Z1
e use a função INDIRETA para converter a sequência de texto em uma referência de célula. Por exemplo:
'\Daily Revenue\2015[Revenue 2015.xls]Year Summary'!$C$160 becomes
INDIRECT("'\Daily Revenue\"&Z1&"[Revenue "&Z1&".xls]Year Summary'!$C$160")
Com uma planilha existente, você precisaria fazer uma alteração única para modificar as referências das células. Depois disso, você poderá alterar o ano sempre que quiser, alterando a Z1
entrada.