Добавление или замена текста в гиперссылках

Я очень растерялся, пытаясь понять, как это можно сделать. Это очень просто, но пока не могу найти решение.

Что я хочу знать, так это следующее. У меня есть три отдельных документа, каждый из которых связан в некоторой степени; данные вводятся из документа (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.

Другие вопросы по тегам