Добавление или замена текста в гиперссылках
Я очень растерялся, пытаясь понять, как это можно сделать. Это очень просто, но пока не могу найти решение.
Что я хочу знать, так это следующее. У меня есть три отдельных документа, каждый из которых связан в некоторой степени; данные вводятся из документа (1. основной ввод) и суммируются в три таблицы.
Каждый документ одинаково выложен, единственными переменными факторами являются даты и для основного ввода у нас есть числовые значения.
В форме иллюстрации это выглядит так:
а. 1 Мастер вход -> (подается на) 2,3 б. 2 -> (подается в) 3 и 4 c. 3 -> (подается в) 4
Что я хочу знать, так это то, что в документах 2,3 и 4... данные меняются каждый год. У меня есть много "гиперссылок" таблицы в качестве примера:
2015 = "\ Ежедневный доход \2015[Доход 2015.xls] Сводка года '!$C$160"
2016 = "\ Ежедневный доход \2016[Доход 2016.xls] Сводка года '!$C$160"
2017 = "\ Ежедневный доход \2017[Доход 2017.xls] Сводка года '!$C$160"
Из приведенного выше единственной переменной, которую мне нужно изменить, является год, есть ли какой-либо код / макрос и т. Д., Которые я могу использовать для замены ГОДА внутри гиперссылки. Учтите, что путь к файлу всегда будет оставаться неизменным.
Я полностью осведомлен о функции поиска и замены, однако хочу сделать этот процесс удобным и легким.
Пожалуйста, помогите мне, спасибо!
2 ответа
В вашем вопросе есть несколько неясностей. В этом ответе предполагается, что вы говорите о ссылках на ячейки в других книгах, как показано в ваших примерах, а не о гиперссылках, и что задача состоит в том, чтобы настроить ссылки с возможностью изменения по годам, а не переписывать все формулы каждый год.
Во-первых, вам нужна ссылка на год. Неясно, когда или каким образом вы хотите, чтобы год менялся (автоматически 1 января каждого года? В какой день вы выбираете? Вы хотите изменить год в любое время?). Так что я буду основывать это на общем решении. Выберите ячейку для хранения года. Для моего примера я буду использовать ячейку Z1
листа, который содержит ссылки на ячейки в вашем примере. Если вы хотите, чтобы возможность изменить год по желанию или на дату по вашему выбору, просто введите в Z1
четырехзначный год. Если вы хотите, чтобы год автоматически изменялся 1 января, используйте =YEAR(TODAY())
,
Затем вместо жесткого кодирования года в каждой формуле объедините ссылку на Z1
и используйте функцию INDIRECT, чтобы преобразовать текстовую строку в ссылку на ячейку. Например:
'\Daily Revenue\2015[Revenue 2015.xls]Year Summary'!$C$160 becomes
INDIRECT("'\Daily Revenue\"&Z1&"[Revenue "&Z1&".xls]Year Summary'!$C$160")
С существующим рабочим листом вам нужно будет внести одноразовые изменения, чтобы изменить ссылки на ячейки. После этого вы можете изменить год в любое время, изменив Z1
запись.
Прежде всего, вы продолжаете говорить о гиперссылках. Я думаю, что вы имеете в виду формулы, которые ссылаются на другие файлы. Это не гиперссылки. Вот решение, если вы действительно имели в виду гиперссылки:
Чтобы ответить на ваш актуальный вопрос: да, для этого есть макрос. Конечно. Я думаю, что вам нужно знать о Worksheet.Hyperlinks
объект. Вы можете перебирать каждую гиперссылку на каждом листе и заменять адрес тем, что хотите. Вот пример фрагмента:
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
Вам придется изменить его, если вы не хотите изменять каждую гиперссылку, добавляя условные операторы, такие как If InStr(1, hyp.Address, "\Daily Revenue\2015") Then
, Вы могли бы использовать Workbook_Open
Для запуска события при каждом открытии файла выберите нужный год в зависимости от имени файла, а затем запустите замену для гиперссылок. Да, это будет срабатывать при каждом открытии файла, даже если он уже правильный. В зависимости от того, сколько у вас гиперссылок, это может быть хорошо, или все может остановиться.
А вот фрагмент кода, если вы действительно имели в виду формулы. Опять же, вам придется адаптировать его больше к вашим потребностям, но это должно начать вас.
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
Кроме того, если вы имели в виду формулы, то ваш вопрос является дубликатом StackOverflow.