Страницы: 1
RSS
Массовое изменение адресов ссылок
 
Коллеги, добрый день!

Погуглив некоторое время форум не нашел решения для своей задачи, буду признателен если укажете на уже существующие решения.

Задача:
-Рабочая книга с большим кол-вом ссылок (не гиперссылок) на другие книги.
-Ссылки выглядят следующим образом: ='C:\june\[книга-06-18.xlsx]лист1'!A1
-Необходимо все ссылки на листе или в рамках какого-либо диапазона отредактировать след образом:

До: ='C:\june\[книга-06-18.xlsx]лист1'!A1
После: ='C:\august\[книга-08-18.xlsx]лист1'!A1

Заранее благодарю за содействие.
С уважением,
JG
 
День добрый!
Вот так через СОНТРЛ+Н и меняйте
а лучше конечно пример прикладывать
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
День добрый!Вот так через СОНТРЛ+Н и фигачтеа лучше конечно пример прикладывать
Александр, благодарю, но для большого количества ссылок такой способ неприменим, после замены ctrl+h открывает окно для указания файла, и если счет идёт на тысячи ссылок, то уместнее воспользоваться макросом.
Вопрос открыт.
Изменено: JGreen - 03.10.2018 11:22:34
 
Цитата
JGreen написал:
о уместнее воспользоваться макросом
А макрос откуда должен узнать что и на что Вы хотите заменить? Тогда Вы должны по другому сформулировать задачу, например макроскоторый при первом открытии файла в текущем месяце меняет все ссылки на файлы прошлого месяца (структура имени) на файлы текущего месяца (структура имени)
Не стреляйте в тапера - он играет как может.
 
Цитата
Ts.Soft написал:
А макрос откуда должен узнать что и на что Вы хотите заменить? Тогда Вы должны по другому сформулировать задачу
Создания диалога в макросе для выбора диапазона ячеек и критерия замены как раз не является основной проблемой в задаче. Мне необходимо понять как осуществить процесс замены в формуле, какие свойства и как использовать.
Изменено: JGreen - 03.10.2018 11:28:59
 
Запускаете макрорекордер и получаете приблизительно такой код:
Код
Sub Макрос1()
' Макрос1 Макрос
    Columns("B:B").Select
    Selection.Replace What:="='C:\june\[книга-06-18.xlsx]лист1'!A1", Replacement _
        :="'=C:\august\[книга-08-18.xlsx]лист1'!A1", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
ну а потом меняете его под свои условия
Не стреляйте в тапера - он играет как может.
 
Цитата
JGreen написал:
после замены ctrl+h открывает окно для указания файла
Если книга C:\august\книга-08-18.xlsx существует, то это окно появляться не должно.
Вы должны заменить путь в одно действие, т.е. june\[книга-06 заменить на august\[книга-08 , а не june на august потом 06 на 08.
 
Ts.Soft, спасибо, но у меня в диапазоне встречаются разные формулы, т.е. может отличаться первая часть названия файла xxxx-08-18.xlsx, xxxx - переменная.
Меня интересуют решение, в котором при идентификации заданного критерия замены (одного или нескольких для одной формулы, в моём случае для двух) макрос меняет в формуле необходимую часть на заранее заданные элементы.

Казанский, в одно действие изменить без всплывающего окна не получается, т.к. может отличаться первая часть названия книги. Я пробовал создавать функцию по аналогии с Ф.текст в MS 2016, редактировать текст формулы в две замены и потом заменять формулу, но за счет большого диапазона данных это тоже не самый сподручный способ.
 
JGreen, в конце концов замените = на Ё , формулы станут текстом, меняйте в нем что угодно. Потом замените Ё на = .
 
Казанский, для большого диапазона с описанными мною ранее особенностями такой способ довольно трудозатратен.

Кажется получилось в VBA сделать желаемую замену, правда пока на простом примере и на небольшом диапазоне делал проверку, но лёд тронулся, лишних ошибок не возникает, надо только добавить выбор параметров для изменения в диалоге.
Код
Sub change()
    Dim CC As Range
    Dim st$, newst$, findstr$, ret$, st1$, newst2$, findstr3$, ret4$
    Dim UserSelect As Excel.Range
    Worksheets("Лист1").Select
    Set UserSelect = Application.InputBox("Select your favorite cell:", Type:=8)
    For Each CC In [UserSelect]
        st = CC.Formula
        findstr = "june"
        ret = "september"
        newst = Replace(st, findstr, ret, 1)
        findstr1 = "-06"
        ret1 = "-09"
        newst1 = Replace(newst, findstr1, ret1, 1)
        CC.Formula = newst1
        MsgBox (newst1)
    Next
End Sub

Тему можно закрыть, всем спасибо за помощь.

С уважением,

JG

 
Интересно, какой-такой "Гений" додумался до такого алгоритма?!
Умереть - не встать!  :D
____________________________________________________________­__
Самый простой способ управлять процессом расчета в Вашей рабочей книге:
1. иметь таблицу со всеми месяцами, годами и нужными показателями в Вашей рабочей книге,
1.1. можно придумать хороший вариант имен для показателей, чтобы в формулах имена четко давали информацию, о каком показателе идет речь!
2. алгоритм Вашего "Гения" в любой момент сможет исказить процесс расчета!
3. предложенный вариант алгоритма предлагает:
3.1. избавиться от необходимости открывать "кучу" файлов,
3.2. формулы станут "прозрачными" для расчета.
 
Цитата
Мотя написал:
Интересно, какой-такой "Гений" додумался до такого алгоритма?!Умереть - не встать!  
Ваш покорный слуга)

Прошу прощения за отсутствие элегантности в коде и использование не самых эффективных инструментов.

Это не конечный вариант, больше похоже на прототип на коленке.Буду дорабатывать и параллельно изучать основы VBA.
Спасибо за формализацию алгоритма, по возможности применю.

С уважением,

JG
 
Цитата
JGreen написал:
Спасибо за формализацию алгоритма, по возможности применю.
Думаю: чем раньше, тем лучше!  :)
Это избавит Вас сразу от ненужных макросов, от проблем содержания открываемых файлов в рабочем состоянии...
 
Цитата
JGreen написал:
-Необходимо все ссылки на листе
Если именно на листе, может быть проще использовать изменение связей? Если на конкретном листе, то это лист можно переместить (не скопировать) в новую книгу, изменить связи и переместить обратно. Это, как раз, избавит от возможной ошибки отсутствия файла - ведь отсутствующий файл при изменении связей выбрать нельзя.
PS. Для диапазона, в принципе, можно использовать такой-же способ, но придется вырезать нужный диапазон, вставить в нужную книгу, по тем-же "координатам", изменить связи и вырезать-вставить обратно.
Сам практикую, когда нужно "перепривязаться" к другому файлу (такому-же по структуре, но в другой папке или с другим именем, например) разово.
Страницы: 1
Наверх