Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
массовое изменение адресов гиперссылок в книге
 
Доброе время суток!
У меня такая проблема:
Есть два файла, один основной(1), другой второстепенный(2). Оба находятся в одной папке. Каждая ячейка в файле 1 имеет гиперссылку на определенную ячейку в файле 2 и также обратно, для возвращения в основной файл.
В файле 1 гиперссылки не имели полного адреса расположения файла 2 в сетевой папке, что давало возможность копировать папку с обоими файлами, допустим, на флешку, и не ломая гиперссылки. Фактически адрес ссылки выглядел так: "Файл 2.xlsm#'Имя Листа'!Номер ячейки"
Сейчас на сетевом ресурсе что-то произошло, и в гиперссылках появились лишние адреса. В итоге всё начало выглядить так: /../../../Папка/Папка/"Файл 2.xlsm#'Имя Листа'!Номер ячейки". Можно ли при помощи какого-либо макроса удалить часть адреса гиперссылки, ну или заменить на пустоту сразу во всех гиперссылках документа?Их больше тысячи. Хэлп ми!!!
 
Ссылки все на одном листе?
Код
Sub FixHyperlinks()
    Dim wks As Worksheet
    Dim hl As Hyperlink
    Dim sOld As String
    Dim sNew As String

    Set wks = ActiveSheet
    sOld = "c:\" 
    sNew = "S:\Network\"
    For Each hl In wks.Hyperlinks
        hl.Address = Replace(hl.Address, sOld, sNew)
    Next hl
End Sub 
Изменить нужно то, что в кавычках.
 
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
нет, ссылки во всей книге. в итоге надо чтобы удалилась чать пути /../../../Папка/Папка/ и осталось только название файла и ячейки....
 
The_Prist,это мне не помогло, дело в том, что каждая гиперссылка в файле 1 имеет адрес разной ячейки второстепенного файла, поэтому мне необходимо только удалить первую часть адреса
 
Т.е. попробовать лень? Код принимает в качестве аргумента не полный адрес - а часть. Как раз первую часть ссылок(одинаковую) указываете. Если надо удалить - в качестве заменяемого адреса пусто.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, не думаю, что я ленивый человек. Пробовал я много чего. К примеру:
Код
Sub test2()
On Error Resume Next
Dim hl As Hyperlink, s As String, sh As Worksheet
s = "../../../../Maintenance/Транспортная%20сеть/Транспортная%20сеть/" ' часть гиперссылки, подлежащая удалению
For Each sh In ActiveWorkbook.Worksheets
For Each hl In sh.Hyperlinks
If hl.Address Like s & "*" Then hl.Address = Replace(hl.Address, s, ""  
Next
Next sh
End Sub 
комп думает три секунды и.....ничего не меняется
 
Кнопка для форматирования кода в сообщении
 
Вот таким кодом я вытаскивал весь адрес из гиперссылки. А доработать чтобы остались названия ячейки, не сложно
Код
With ActiveSheet
    For i = 1 To .Hyperlinks.Count
            .Hyperlinks(i).Range.Offset(0, 1).Value = .Hyperlinks(i).Address
      Next i
End With 
 
Спасибо vikttur, ,

Код
Sub test2()
    On Error Resume Next
    Dim hl As Hyperlink, s As String, sh As Worksheet
    s = "../../../../COMMON/TDMaintenance/Транспортная%20сеть/Транспортная%20сеть/" ' часть гиперссылки, подлежащая удалению
    For Each sh In ActiveWorkbook.Worksheets
        For Each hl In sh.Hyperlinks
            If hl.Address Like s & "*" Then hl.Address = Replace(hl.Address, s, "")
        Next
    Next sh
End Sub

 
 
пробовал также:

Код
Sub ЗаменаИспорченныхГиперссылок()
    On Error Resume Next
    Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
    ' часть гиперссылки, подлежащая замене
   oldString = "../../../../COMMON/TDMaintenance/Транспортная%20сеть/Транспортная%20сеть/"
    ' на что заменяем
   newString = ""
    For Each sh In ActiveWorkbook.Worksheets    ' перебираем все листы в активной книге
       For Each hl In sh.Hyperlinks    ' перебираем все гиперссылки на листе
           If hl.Address Like oldString & "*" Then
                hl.Address = Replace(hl.Address, oldString, newString)
            End If
        Next
    Next sh
End Sub
не хочет работать и все тут. Я уже и в параметрах безопасности макросам все разрешил...
 
Приложите файл-пример
 
Кросс: http://programmersforum.ru/showthread.php?t=262907

Kazakoff, нет файла - нет помощи
Я же просил с вас файл с ОДНОЙ гиперссылкой
неужто пустой файл, содержащий ОДНУ проблемную гиперссылку, может быть секретным?
 
я прошу прощения.
вот создал пример, там должен быть макрос test2. Может я чего не догоняю, но он не срабатывает.
 
Попробовал заменить "..\..\..\..\COMMON\TDMaintenance\Транспортная сеть\Транспортная сеть\" на пусто своим кодом - все заменилось, никаких проблем. И код в книге работает.
Одно не пойму - зачем Вы знаки "%20" добавили в адреса для замены? Их ведь нет в гиперссылках изначально. Может поэтому не работает? А Вы все проблемы на нормальные коды валите?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
программа сама почему-то заменила все пробелы на "%20"
 
Какая такая программа?
Попробуйте для своих ячеек посмотреть адреса гиперссылок и как они выглядят реально:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,большущее Вам спасибо, поставили меня на правильный путь!!! %20 - это эксель так заменил все пробелы в ссылках. и я тупо копировал путь из ссылки в макрос с процентами, убрал и все получилось. Спасибо, что потратили на меня время!!
 
Добрый вечер!
А вот в книге с кучей таких формул возможно поменять середину?

Код
=ЕСЛИ((Extract_Value_ADO_Sh("\\udc10\Svodka\Начальник НГДУ\2014\08 июль\Добыча\";$K$3;"Доб.по ДНС";"B14"))="";"";(Extract_Value_ADO_Sh("\\udc10\Svodka\Начальник НГДУ\2014\08 июль\Добыча\";$K$3;"Доб.по ДНС";"B14")))
 
Например "июль" на "август".
Пробовал вводить код из статьи массовых изменений, но ругается на ячейку "$К$3"
 
а через обычную замену Ctrl-H по части формулы - не работает?
F1 творит чудеса
 
работает, но надо каждой ячейке нажимать ENTER, а ячеек слишком дохрена, это никак не вариант.
плюс, когда еще файла не существует, выходит запрос на поиск этого файла, и на этом всё прерывается.
короче, это бред, нужен нормальный код
 
зачем жать Enter, если есть кнопка "заменить все"?
F1 творит чудеса
 
как же Вы не понимаете, мне нужно указать диапазон, потому что в некоторых ячейках менять ту же самую часть формулы не надо
 
как же мне было понять, если вы об этом не говорили?
А чем будет отличаться выбор диапазона на листе от выбора диапазона в макросе? Жесткой заданностью? или критерием каким-то?
Ну, каков файл примера - таково и решение.
F1 творит чудеса
 
Вот, пожалста.
Мне надо допустим скопировать все августовские ячейки и воткнуть их в сентябрь , но так как все пути, для каждого днса будут разные, разные листы, разные ячейки на листах, то есть заново вручную их прописывать - это бред, то самый лучший вариант - это поменять месяц, а всё остальное будет вязаться от даты.
 
4vaker, формируйте пути через сцепку текстовых констант с переменной частью. Конкретней не скажу. В примере не показано что есть, а что надо получить. Хотя прочтение правил сэкономило бы Ваше время и время помогающих. ДобРа.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Нужно из столба "Е" сделать столб "Х".
 
Замените:
Код
"\\usndc10\Svodka\Начальник НГДУ\2014\08 сентябрь\Добыча ТПП\"
на
Код
"\\usndc10\Svodka\Начальник НГДУ\2014\08 "&строчн(ТЕКСТ(X$3;"ММММ"))&"\Добыча ТПП\"

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
вообще-то там код подсвечен красным из-за несоблюдения синтаксиса. Если вам надо изменить строку, которая содержит кавычки, то ее надо тогда прописать так:
Код
sWhatRep = InputBox("Что меняем?", "Ввод данных", """" & "\\usndc10\Svodka\Начальник НГДУ\2014\08 август\Добыча ТПП\" & """" & ";$K$3;" & """Доб.по ДНС""" & ";" & """B14""")
sRep = InputBox("На что меняем?", "Ввод данных", """" & "\\usndc10\Svodka\Начальник НГДУ\2014\08 декабрь\Добыча ТПП\" & """" & ";$K$3;" & """Доб.по ДНС""" & ";" & """B14""")

только макрос ничего не меняет, так как нет гиперссылок в ячейках.
PS
F1 творит чудеса
 
Кажется я не с того начал. Значит давайте сначала.
Самый простой способ казалось бы ctrl+H у меня НЕ РАБОТАЕТ, поэтому я к вам и обратился.
Допустим я копирую десять ячеек из одного столба в другой, выделяю скопированные ячейки, жму ctrl+h, делаю всё по инструкции, если жать "заменить", то каждую из десяти ячеек он мне предлагает заменить, соответственно необходимо нажимать 10 раз энтер - это фуфло если у меня 200 ячеек, понятно. Если я жму "ЗАМЕНИТЬ ВСЕ", то плевать, что я выделил эти 10 ячеек, он меняет ПОЛНОСТЬЮ ВСЕ ЗНАЧЕНИЯ НА ЛИСТЕ. А мне нужно, чтобы он менял только то, что мне надо. Вот и всё.
Я вам даже больше скажу. Просто заполнив некоторые ячейки словом "август", и прописывая код, указанный в статье по массовой замене, он у меня спрашивает по порядку, что хочу поменять, я ему пишу "август", он спрашивает на что хочу поменять, я пишу "сентябрь", он просит выделить диапазон, я выделяю диапазон со словами "август" и БАМ, ничего не происходит, как был август так и остался.
Изменено: 4vaker - 21 Авг 2014 13:12:07
Страницы: 1 2 След.
Читают тему (гостей: 2)
Наверх