Страницы: 1
RSS
Перенос гипперссылки на другой лист/книгу
 
Здравствуйте!

Есть лист с довольно сложно генерируемыми гиперссылками
Пример формулы  -
Код
=ЕСЛИОШИБКА(ЕСЛИ(ВПР($A2;ВсеМетодики!$A:$U;19;ЛОЖЬ) =0;""; ЕСЛИОШИБКА(ГИПЕРССЫЛКА(ВПР($A2;ВсеМетодики!$A:$U;19;ЛОЖЬ);ВПР($A2;ВсеМетодики!$A:$U;18;ЛОЖЬ));""));"") 

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

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

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

Тут есть два легких способа:
1- файл- изменить связи с файлами -выбираете все связи по очереди - разорвать связь  (+остаются внутренние формулы, значения с ссылок встают числом);
2- копировать не лист, а данные и вставить их через ПКМ-правая кнопка мыши (в параметрах вставки выбираем значок 123)- значения, если нужно привести в формат, который был, то кисточкой (формат по образцу). (- все формулу преобразуются в числа).
 
Цитата - не бездумная копия [МОДЕРАТОР]

Нет не совсем так
Я наверное недостаточно подробно пояснил в первом своем посте
Речь идет не о ссылка в формулах, а о гиперссылках привязываемых к ячейке

Гиперссылки привязываемые к ячейка, можно разделить на фиксированные и динамические

- Фиксированные это гиперссылки привязываемые вручную прямо на листе (ПКМ->ссылка) или в VBA функцией Hyperlinks.Add
Эти ссылки видны в коллекции Hyperlinks

- Динамические гиперссылки это ссылки формируемые функцией ГИПЕРССЫЛКА, причем сама эта функция может сложным образом входить в другую функцию с выборами, сложно формируемыми адресами, указывать на другие листы или книги и прочее. Кстати говоря Эксел для таких сложных фуекций даже не сообразит формат поменять на тот, который используется для гиперссылок. Эти ссылки не видны в коллекции  Hyperlinks

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

Я прикрепил файл для иллюстрации

Однако я нашел способ такого копирования, а точнее получения адреса вот такой динамической ссылки. Заключается он в том, что ячейку надо скопировать в Word
(радость то какая - при такой операции Word вычисляет таки актуальный адрес ссылки и превращает ее в фиксированный), далее проверить коллекцию Hyperlinks уже объекта Word

Конечно в таком виде работает довольно таки медленно, но при желании можно усовершенствовать, например объект wdApp сделать статическим и не каждый раз создавать/разрушать, это весьма прилично ускорит работу, если надо много ячеек обработать
Проверено на Excel/Word 2019  (да и не забыть подключить Microsoft Object Library )
Код
' Получаем адрес гиперссылки
Function GetLink(r As Long, c As Long) As String
    
    Dim wdApp As Word.Application          
    Dim wdDoc As Word.Document
    
    If Cells(r, c).Value = Empty Then
      GetLink = ""
      Exit Function
    End If
    
    Cells(r, c).Copy
    
    Set wdApp = CreateObject("Word.Application")
    wdApp.Documents.Add
    Set wdDoc = wdApp.Documents(1)
    
    wdApp.Visible = False
    wdDoc.Range.PasteExcelTable False, False, False
    
    ' Теперь найдем ссылку в коллекции Hyperlinks Word-локумента word
    If wdDoc.Hyperlinks.Count = 0 Then
        GetLink = ""
      Else
        GetLink = wdDoc.Hyperlinks(1).Name
     End If
    wdDoc.Close (wdDoNotSaveChanges)
    wdApp.Quit (wdDoNotSaveChanges)
    
End Function
Изменено: lks1965 - 04.04.2021 22:44:10
Страницы: 1
Наверх