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

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

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

Я хочу узнать следующее. У меня есть три отдельных документа, все из которых в какой-то степени связаны; данные вводятся из документа (1. основной ввод) и суммируются в трех электронных таблицах.

Каждый документ имеет идентичную структуру, единственными переменными факторами являются даты, а для основных входных данных у нас есть числовые значения.

В наглядном виде это выглядит так:

a. 1 Главный вход --> (входит в) 2,3 b. 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"

Из вышесказанного единственная переменная, которую мне нужно изменить, это год. Есть ли какой-либо код/макрос и т. д., который я могу использовать для замены?ГОДвнутри гиперссылки. Имейте в виду, что путь к файлу будетвсегдаоставаться прежним.

Я полностью осознаю,найти и заменитьОднако я хочу сделать эту функцию удобной и простой в использовании.

Пожалуйста, помогите мне, спасибо!

решение1

Во-первых, вы продолжаете говорить о гиперссылках. Я думаю, вы имеете в виду формулы, которые ссылаются на другие файлы. Это не гиперссылки. Вот решение, если вы действительно имели в виду гиперссылки:


Отвечая на ваш фактический вопрос: Да, для этого есть макрос. Конечно. Я думаю, вам нужно знать об объекте 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

Кроме того, если вы имели в виду формулы, то ваш вопрос является дубликатомПереполнение стека.

решение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.

Связанный контент