mail mail

Макрос для исправления повреждённых гиперссылок во всей книге Excel

Макрос для исправление повреждённых гиперссылок во всей книге:

Sub ЗаменаИспорченныхГиперссылок()
    On Error Resume Next
    Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
    ' часть гиперссылки, подлежащая замене
   oldString = "C:\Documents and settings\Бухгалтер\Application data"
    ' на что заменяем
   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

Макрос может быть полезен для замены абсолютных гиперссылок на относительные, а также помогает вернуть работоспособность ссылок после случайного сохранения файла Excel в другой папке (на другом диске).

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

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

то есть
...создать ссылки на сайты...

>> В меню "Изменение Гиперссылки" слева есть возможность выбора:
это для того, чтобы можно было мышкой создать ссылку. а так, эти кнопки особой роли не играют.
можно при помощи этих кнопок создать ссылки на файлы, затем запустить скрипт по изменению ссылок, поменять например "http://ya.ru" на "\helloworld.txt" и при следующем открытии меню "Изменение Гиперссылки" слева будет нажата другая кнопочка

В меню "Изменение Гиперссылки" слева есть возможность выбора:
Связать с:
- файлом, веб-страницей;
- местом в документе;
- новым документом;
- электронной почтой.
Ты не ошибся...

а по-моему все ссылки одинаковые. она становится гипер или обычной просто из-за содержимого ссылки. например если начинается на "http://..." значит гипер, а если "C:\..." или "\\192.168.1.1\..." значит локальная или сетевая там.

или я ошибаюсь?

как сделать чтобы менял обычные ссылки а не гипер ?

Вроде бы формат файла не изменился (xls) 97-2003, как был так и остался (не у всех, просматривающих, таблицу есть новый (xlsx))

Может быть ты раньше сохранял в формате 2007-2010 экселя (xlsx), а нынче в старый формат (xls)?

Да, действительно, в директорию Q:\Тендерный отдел\01_Процедуры\ и все сразу заработало!!!
От души благодарю!!! Единственное, почему файл весит в два раза больше теперь!!!?

Ну а название макроса зачем удалили?

Замените

Sub ()

на
Sub test()

и всё будет работать

Вот смотри, мой макрос тоже тот же но немного переделанный.

Sub ZamenaIsporchennihGiperssilok()
    On Error Resume Next
    Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
    ' part of hyperlink, which you want to change
   oldString = "C:\Users\fss\AppData\Roaming\Microsoft\Excel\"
    ' to what to change
   newString = "Q:\Тендерный отдел\01_Процедуры\"
    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

Попробуй его, если не получится, закрой все книги Excel, скопируй нужный эксель файл в директорию Q:\Тендерный отдел\01_Процедуры\, затем запусти этот файл экселя оттуда, выполни этот скрипт, затем пересохрани (сохранить как...) в нужное место.

Sub ZamenaIsporchennihGiperssilok()
    On Error Resume Next
    Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
    ' part of hyperlink, which you want to change
   oldString = "C:\Users\fss\AppData\Roaming\Microsoft\Excel\"
    ' to what to change
   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

У тебя появилась данная проблема потому, что у тебя завис эксель, ты закрыл, эксель перезапустился, ты открыл автосохранение, чтобы не потерять работу, но при этом потерялись ссылки. Потому что ссылки были относительные.

Отпишешься.

Начну с начала.
Были Гиперссылки правильные стали не правильные.
По Гуглил, нашел макрос, все сделал как следует, но в результате - ругается.
Ват сам макрос:

Sub ()
   On Error Resume Next
   Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
   oldString = "C:\Users\fss\AppData\Roaming\Microsoft\Excel\"
   newString = "Q:\Тендерный отдел\01_Процедуры\"
    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

что тебе конкретно надо? напиши свои потребности я отвечу. с тем материалом я давно разобрался так что думаю смогу тебе помочь.

Очень сильно обрадовался когда нашел данный материал. Спасибо!
Все сделал как написано, и .... результат: выскакивает окошко с текстом "compile error: expected: identifier"
Что делать, подскажите пожалуйста!!!

то есть ячейки сначала были пустые, затем я добавил сюда автозаполнением с первых двух гиперссылочных до 99, то меняются только первые 2 ячейки, которые я вбивал руками.

Скажите, а как мне создать ссылки, а затем их пронумеровать? то есть так:
а01.рсш
а02.рсш
...
а99.рсш

Потому что при этом раскладе у меня не конвертит:
Sub ZamenaIsporchennihGiperssilok()
On Error Resume Next
Dim hl As Hyperlink, oldString As String, newString As String, sh As Worksheet
' part of hyperlink, which you want to change
oldString = "rrr"
' to what to change
newString = "PIR 00"
i = 36
For Each sh In ActiveWorkbook.Worksheets ' ?????????? ??? ????? ? ???????? ?????
For Each hl In sh.Hyperlinks ' ?????????? ??? ??????????? ?? ?????
If hl.Address Like "*" & oldString & "*" Then
i = i + 1
st = newString + CStr(i)
hl.Address = Replace(hl.Address, oldString, st)
End If
Next
Next sh
End Sub

Спасибо, это как раз то, что мне было нужно.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
4 + 0 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.