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

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

0

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


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

0

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

Во-первых, вам нужна ссылка на год. Неясно, когда или каким образом вы хотите, чтобы год изменился (автоматически 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .