Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Перенос гиперссылки на другой лист/книгу

Автор lks1965, 24.03.2021, 19:27:24

« назад - далее »

lks1965

Здравствуйте!

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

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

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

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

Дмитрий Щербаков(The_Prist)

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

lks1965

#2
Цитата: Дмитрий Щербаков(The_Prist) от 24.03.2021, 19:42:31
Скорее всего сделать это можно только макросом. Каким именно - надо как минимум видеть файл. В написанных Вами формулах создание гиперссылок не прослеживается. Возможно макрос будет простой, возможно и нет. Возможно и им не получится корректно сделать.

Я нашел способ такого копирования, а точнее получения адреса вот такой динамической ссылки. Заключается он в том, что ячейку надо скопировать в 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) Is Nothing 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

[admin]Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума[/admin]

Дмитрий Щербаков(The_Prist)

Цитата: lks1965 от 04.04.2021, 16:47:08а точнее получения адреса вот такой динамической ссылки
если бы приложили файл - можно было сделать и через Excel. Скорее всего это проще и удобнее, чем в Word крутиться.
Допустим, в ячейке A1 у Вас ссылка формируется формулой(как в первом сообщении). Тогда создать из неё реальную гиперссылку можно простым кодом:
ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:=Range("A1").Value,  TextToDisplay:=Range("A1").Value
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

lks1965

Цитата: Дмитрий Щербаков(The_Prist) от 04.04.2021, 17:37:17
если бы приложили файл - можно было сделать и через Excel. Скорее всего это проще и удобнее, чем в Word крутиться.
Допустим, в ячейке A1 у Вас ссылка формируется формулой(как в первом сообщении). Тогда создать из неё реальную гиперссылку можно простым кодом:
ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:=Range("A1").Value,  TextToDisplay:=Range("A1").Value


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

Но ситуации бывают разные, есть какие-то наследия тяжелых времен, есть что то доставшееся по наследству и т.д. Разбираться со всем этим и перестраивать сложно и долго

Вот для этого и потребовалась такая возможность

Яндекс.Метрика Рейтинг@Mail.ru