#excel #vba #hyperlink #range #user-defined-functions
Вопрос:
Я пытаюсь создать UDF, чтобы получить полный путь к диапазону, чтобы создать гиперссылку на этот диапазон.
До этого момента я писал этот код:
Function DirCelda(rng As Range) As String
Application.Volatile
Dim Sh As Worksheet
Dim Wb As Workbook
Set Sh = rng.Parent
Set Wb = Sh.Parent
DirCelda = Wb.FullName amp; "#'" amp; Sh.Name amp; "'!" amp; rng.Address
End Function
Он отлично работает с ячейками внутри документа и с диапазонами в других документах (пока они открыты).
т.е.:
=DirCelda(F8:G9)
возвращает: P:RodriLinksExcel.xlsm#’Лист1′!$F$8:$G$9
=DirCelda('[Caminos.xlsx]Sheet23'!$M$6:$N$22)
возвращает: P:RodriCaminos.xlsx#’Лист23′!$M$6:$N$22
Но, когда я закрою книгу «Caminos.xlsx», Excel (в соответствии с объяснением здесь) изменяет способ определения параметра, включая полный путь к файлу.
Итак, последний пример превращается в это:
=DirCelda('P:Rodri[Caminos.xlsx]Sheet23'!$M$6:$N$22)
И он возвращает: #ЗНАЧЕНИЕ!ошибка.
Я пытался включить/отключить приложение de.Изменчивый метод, но когда этот UDF используется в формуле ГИПЕРССЫЛКИ (), Excel снова вычисляет UDF.
Я пытался преобразовать этот диапазон в строку, чтобы определить путь к диапазону, но каждый раз получал одну и ту же ошибку.
Кто-нибудь может мне помочь, пожалуйста?
Заранее спасибо. С уважением!
Комментарии:
1. Не уверен, что это возможно.
2. Моя первая идея состояла в том, чтобы функция перезаписала
Application.Caller
значение строковым адресом, удалив формулу. Но мои тесты, чтобы доказать, что эта идея была жизнеспособной, провалились, потому что Excel отчаянно ограничивает UDFS возможностью изменять другие ячейки, самих себя или что-либо еще, кроме простого возврата значения. Есть несколько примеров UDF, которые могут это сделать, но я не смог воспроизвести эти UDF в своей версии excel.3. @Toddleson спасибо за ваш ответ. Я попытался использовать
Application.Caller
, но он возвращает мне диапазон, в котором был вызван UDF. Однако, поскольку цель состоит в том, чтобы использовать его внутри формулы [т. Е.: =ГИПЕРССЫЛКА(Dircel(A1),»Текст ссылки»)], когда я получаю значение deApplication.Caller
, я получаю «Текст ссылки», а не полный путь диапазона. Еще раз спасибо за вашу помощь!