Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Именованный диапазон и функция VBA в функции ГИПЕРССЫЛКА - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Именованный диапазон и функция VBA в функции ГИПЕРССЫЛКА (Макросы/Sub)
Именованный диапазон и функция VBA в функции ГИПЕРССЫЛКА
ZetMenChavo Дата: Суббота, 16.07.2022, 02:28 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. В документах нередко использую функцию ГИПЕРССЫЛКА, которая отправляет на разные диапазоны в зависимости от исходных данных.
Недавно, в рамках VBA, начал осваивать возможность написания собственных функций, и одним из первых решил упростить создание адреса массива, типа 1:1 или A:A, на который должна перебрасывать гиперссылка.
Написать функцию в VBA смог и она выдовала тот результат который надо, но когда сунул её в гипссылку, та не сработала.
Методом исключения смог выяснить что в целом гипссылка может работать с моей функцией до тех пор пока в имени гипссылке я не использую именованные диапазоны.
Отказываться от именованных диапазонов не хочется. Зря что ли создавал их? И функцию удобную для себя сделал. Так что прошу подскажите, может можно что то сделать что бы заставить их вместе работать как надо.
К сообщению приложен файл: 6291162.xlsm (14.7 Kb)
 
Ответить
СообщениеЗдравствуйте. В документах нередко использую функцию ГИПЕРССЫЛКА, которая отправляет на разные диапазоны в зависимости от исходных данных.
Недавно, в рамках VBA, начал осваивать возможность написания собственных функций, и одним из первых решил упростить создание адреса массива, типа 1:1 или A:A, на который должна перебрасывать гиперссылка.
Написать функцию в VBA смог и она выдовала тот результат который надо, но когда сунул её в гипссылку, та не сработала.
Методом исключения смог выяснить что в целом гипссылка может работать с моей функцией до тех пор пока в имени гипссылке я не использую именованные диапазоны.
Отказываться от именованных диапазонов не хочется. Зря что ли создавал их? И функцию удобную для себя сделал. Так что прошу подскажите, может можно что то сделать что бы заставить их вместе работать как надо.

Автор - ZetMenChavo
Дата добавления - 16.07.2022 в 02:28
_Igor_61 Дата: Суббота, 16.07.2022, 19:04 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Проверьте названия листов. У меня во втором случае в диспетчере имен нечитаемое что-то. Возможно в разных версиях делалось и где-то что-то неправильно сработало. Для надежности используйте английский алфавит и в названиях листов и в коде VBA. В самом коде VBA разбираться не стал, гадать без комментариев что каждая строчка должна делать... А еще лучше объясните, что и для чего хотите сделать, а не как сделать :) Если вариант работает, то зачем ломать то, что работает? :)


Сообщение отредактировал _Igor_61 - Суббота, 16.07.2022, 19:27
 
Ответить
СообщениеПроверьте названия листов. У меня во втором случае в диспетчере имен нечитаемое что-то. Возможно в разных версиях делалось и где-то что-то неправильно сработало. Для надежности используйте английский алфавит и в названиях листов и в коде VBA. В самом коде VBA разбираться не стал, гадать без комментариев что каждая строчка должна делать... А еще лучше объясните, что и для чего хотите сделать, а не как сделать :) Если вариант работает, то зачем ломать то, что работает? :)

Автор - _Igor_61
Дата добавления - 16.07.2022 в 19:04
ZetMenChavo Дата: Суббота, 16.07.2022, 21:56 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
_Igor_61, Внёс изменения касательно языка, всё тоже самое. Я так понял, методом тыка, когда в стандартной функции использую и функцию ВБА и именованные диапазоны (не находящийся в ф.ВБА) то ГИПЕРССЫЛКА перестаёт отправлять на вычесленный диапазон.

Касательно действий в коде ВБА. Для ГСсылки адрес массива должен задаваться в виде адресов крайних ячеек и двоеточего между ними. К примеру выделить строку 3 будет "#3:3", а столбец E "#E:E". Со строками просто раз там только числа указываются, а вот со столбцами приходиться изощряться чтоб достать букву столбца. А так как указать букву нужно с обеих сторон от двоеточего, то приходиться дважды вычислять её.
И в итоге вот такой вот функционный монстр получается
Код
="#"&ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);4)&":"&АДРЕС(1;СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);4);1;)

И это самый короткий вариант который можно написать стандартными функциями.
Осваивая написание своих функций в ВБА, решил упростить вычисление адреса массива, вычисляя только одну букву, а мокрос уже из неё полноценный адрес делает. В итоге получается тот же результат что и в верхней а запись короче.
Код
=MoiDlaGip(СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);0;0)

(Второй и третий параметры в ней не обязательны, 2й задаёт отступ от первой выч-ой ячейки, 3й переключает между столбцами(0) и строкаи(1))

Для меня сюрпризом стало что ГСсылка перестает работать, если использую вместе с ф.ВБА именованные диапазоны. Но отказываться от них не хотелось бы, таблица большая и они упрощают написание формул.
К сообщению приложен файл: 4676038.xlsm (15.0 Kb)
 
Ответить
Сообщение_Igor_61, Внёс изменения касательно языка, всё тоже самое. Я так понял, методом тыка, когда в стандартной функции использую и функцию ВБА и именованные диапазоны (не находящийся в ф.ВБА) то ГИПЕРССЫЛКА перестаёт отправлять на вычесленный диапазон.

Касательно действий в коде ВБА. Для ГСсылки адрес массива должен задаваться в виде адресов крайних ячеек и двоеточего между ними. К примеру выделить строку 3 будет "#3:3", а столбец E "#E:E". Со строками просто раз там только числа указываются, а вот со столбцами приходиться изощряться чтоб достать букву столбца. А так как указать букву нужно с обеих сторон от двоеточего, то приходиться дважды вычислять её.
И в итоге вот такой вот функционный монстр получается
Код
="#"&ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);4)&":"&АДРЕС(1;СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);4);1;)

И это самый короткий вариант который можно написать стандартными функциями.
Осваивая написание своих функций в ВБА, решил упростить вычисление адреса массива, вычисляя только одну букву, а мокрос уже из неё полноценный адрес делает. В итоге получается тот же результат что и в верхней а запись короче.
Код
=MoiDlaGip(СТОЛБЕЦ($D$8)+ПОИСКПОЗ($A4;$A$2:$A$7;0);0;0)

(Второй и третий параметры в ней не обязательны, 2й задаёт отступ от первой выч-ой ячейки, 3й переключает между столбцами(0) и строкаи(1))

Для меня сюрпризом стало что ГСсылка перестает работать, если использую вместе с ф.ВБА именованные диапазоны. Но отказываться от них не хотелось бы, таблица большая и они упрощают написание формул.

Автор - ZetMenChavo
Дата добавления - 16.07.2022 в 21:56
ZetMenChavo Дата: Суббота, 16.07.2022, 22:35 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Может можно как то свою ГИПЕРССЫЛКУ в ВБА написать? Это помогло бы обойти проблему, ибо написанная ф-я не капризничает когда именованные диапазоны указаны в ней. Я только не знаю какой тип данных нужно присвоить что бы написанная работала так же как встроенная. Может кто из знатаков тут знает?


Сообщение отредактировал ZetMenChavo - Суббота, 16.07.2022, 22:38
 
Ответить
СообщениеМожет можно как то свою ГИПЕРССЫЛКУ в ВБА написать? Это помогло бы обойти проблему, ибо написанная ф-я не капризничает когда именованные диапазоны указаны в ней. Я только не знаю какой тип данных нужно присвоить что бы написанная работала так же как встроенная. Может кто из знатаков тут знает?

Автор - ZetMenChavo
Дата добавления - 16.07.2022 в 22:35
_Igor_61 Дата: Понедельник, 18.07.2022, 20:03 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
А еще лучше объясните, что и для чего хотите сделать, а не как сделать

Ответа не последовало, поэтому излагаю свои (может и тупые и неправильные мысли)
Исходя из названия пользовательской функции - нужно облегчить работу ГИПа, чтобы при нажатии на ячейку с определенным значением он смог перейти на нужный диапазон. Отсюда и имена появились.
Но в примере - только "15", приходится гадать - это строка, или имя диапазона или еще что-то...
Если нужно в VBA - я бы просто посадил адреса на события выделения ячеек (типа Range(такой-то).Value=>переход, без использования функции "гиперссылка", а адреса указывал в коде в виде переменных (но не в диспетчере имен, т.к. имен иного будет, а переменной можно присвоить значение из выделенной ячейки), но если Вам уж так хочется гиперссылки в код запихать... непонятно зачем это надо. Они и так работают, в штатном режиме.
Если вариант работает, то зачем ломать то, что работает?

А с именами в VBA можно примерно так как в примере
К сообщению приложен файл: 4044537.xlsm (17.7 Kb)


Сообщение отредактировал _Igor_61 - Вторник, 19.07.2022, 09:42
 
Ответить
Сообщение
А еще лучше объясните, что и для чего хотите сделать, а не как сделать

Ответа не последовало, поэтому излагаю свои (может и тупые и неправильные мысли)
Исходя из названия пользовательской функции - нужно облегчить работу ГИПа, чтобы при нажатии на ячейку с определенным значением он смог перейти на нужный диапазон. Отсюда и имена появились.
Но в примере - только "15", приходится гадать - это строка, или имя диапазона или еще что-то...
Если нужно в VBA - я бы просто посадил адреса на события выделения ячеек (типа Range(такой-то).Value=>переход, без использования функции "гиперссылка", а адреса указывал в коде в виде переменных (но не в диспетчере имен, т.к. имен иного будет, а переменной можно присвоить значение из выделенной ячейки), но если Вам уж так хочется гиперссылки в код запихать... непонятно зачем это надо. Они и так работают, в штатном режиме.
Если вариант работает, то зачем ломать то, что работает?

А с именами в VBA можно примерно так как в примере

Автор - _Igor_61
Дата добавления - 18.07.2022 в 20:03
ZetMenChavo Дата: Вторник, 19.07.2022, 11:14 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Цитата
Ответа не последовало...

_Igor_61, всмысле не последовало? В ответе на ваше первое сообщение всё написал.
Поставленную задачу гипссылка выполняет как надо, но как я писал раньше, мой интерес в упрощение использования штатных функций.
К примеру для выполнения другой задачи мне приходилось писать функциями вот такого монстра (в работу которого можете не вникать)
Код
=АГРЕГАТ(14;6;СУММ((СТРОКА($B$34:$B$91)-ЯЧЕЙКА("строка";$B$33))^0*(СМЕЩ($G$34:$G$91;;ВЫБОР(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)+1;0;3;8))=СМЕЩ($AE$7;;ОКРВНИЗ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)/3))*(($F$34:$F$91="+")+$Q$31>0)*(($R$34:$R$91=1)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+($R$34:$R$91=2)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1)+($R$34:$R$91=3)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2)+($R$34:$R$91=12)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1))+($R$34:$R$91=13)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2))+($R$34:$R$91=23)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2))+($R$34:$R$91=123)+$Q$31>0));1)

Начав осваивать пользовательские функции смог упростить до вот такого
Код
=МОИТблАртШт(Край;Тбл_Перекл;Тбл_Цвет;Тбл_Вкл;Тбл_Арт;Тбл_123)

[vba]
Код
Function МОИТблАртШт(Krai As Range, Vsego As Range, ArtCvet As Range, ArtVkl As Range, TabArt As Range, Art123 As Range) As Long
    Dim oX&, oY&, oZ&, KC As Long
    KC = Application.Caller.Column - Krai.Column
    oZ = 2
    Do While KC > 3
        KC = KC - 3
        oZ = oZ + 1
    Loop
    oX = Choose(KC, 1, 4, 9)
    For oY = 2 To TabArt.Rows.Count - 1
        If (ArtVkl.Cells(oY) = "+" Or Vsego) _
        And TabArt.Cells(oY, oX) = ArtCvet.Cells(oZ) _
        And Art123.Cells(oY) Like "*" & KC & "*" _
        Then МОИТблАртШт = МОИТблАртШт + 1
    Next oY
End Function
[/vba]
С гипссылкой цель та же, превратить функции, вычисляющие адрес столбцов, из этих
Код
="#"&ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ(Закреп)+7*ПОИСКПОЗ(Избр▐;Список;0);4)&":"&АДРЕС(1;СТОЛБЕЦ(Закреп)+7+7*ПОИСКПОЗ(Избр▐;Список;0);4);1;)

вот в это
Код
=МОИДЛЯГИП(СТОЛБЕЦ(Закреп)+7*ПОИСКПОЗ(Избр▐;Список;0);7)

[vba]
Код
Function МОИДЛЯГИП(NomerStrStl As Long, Optional Otstup As Long, Optional StrILIStl As Byte) As String
    Dim AdrsT1$, AdrsT2$, AdrsN1&, AdrsN2&
    AdrsN1 = NomerStrStl
    AdrsN2 = NomerStrStl + Otstup
    '=========================
    If StrILIStl = 0 Then
        Do While AdrsN1 > 0
            oX = Int((AdrsN1 - 1) / 26)
            oY = (AdrsN1 - 1) Mod 26
            AdrsT1 = Chr(oY + 65) & AdrsT1
            AdrsN1 = oX
        Loop
        If Otstup > 0 Then
            Do While AdrsN2 > 0
                oX = Int((AdrsN2 - 1) / 26)
                oY = (AdrsN2 - 1) Mod 26
                AdrsT2 = Chr(oY + 65) & AdrsT2
                AdrsN2 = oX
            Loop
        Else: AdrsT2 = AdrsT1
        End If
    Else: AdrsT1 = AdrsN1: AdrsT2 = AdrsN2
    End If
    '=========================
    МОИДЛЯГИП = "#" & AdrsT1 & ":" & AdrsT2
End Function
[/vba]
И это работает, гипссылка переносит куда надо, но лишь до тех пор пока в внутри гипссылки, но за пределами моей функции я не начинаю использовать именованные диапазоны.
А использовать их приходиться так как диапазонов много и часть из них скрывается, так что когда возникает необходимость что либо редактировать в документе проще указывать имена диапазонов.
Я обычно сам страюсь способы решения моих задач в инете, и зачастую удачно, но кагда возникают такие мелочи недающие мне получить то что я хочу от функционала, меня это вводит в ступор.
Поэтому и интересует можно ли как то заставить гипссылку работать с моей функцией и именованными диапазонами. Обходные пути явно будуд только усложнять задачу и, даже если надо будет, сам смогу их найти,
но тогда это не даст мне ответа на мой вопрос.


Сообщение отредактировал ZetMenChavo - Вторник, 19.07.2022, 11:19
 
Ответить
Сообщение
Цитата
Ответа не последовало...

_Igor_61, всмысле не последовало? В ответе на ваше первое сообщение всё написал.
Поставленную задачу гипссылка выполняет как надо, но как я писал раньше, мой интерес в упрощение использования штатных функций.
К примеру для выполнения другой задачи мне приходилось писать функциями вот такого монстра (в работу которого можете не вникать)
Код
=АГРЕГАТ(14;6;СУММ((СТРОКА($B$34:$B$91)-ЯЧЕЙКА("строка";$B$33))^0*(СМЕЩ($G$34:$G$91;;ВЫБОР(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)+1;0;3;8))=СМЕЩ($AE$7;;ОКРВНИЗ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)/3))*(($F$34:$F$91="+")+$Q$31>0)*(($R$34:$R$91=1)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+($R$34:$R$91=2)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1)+($R$34:$R$91=3)*(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2)+($R$34:$R$91=12)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1))+($R$34:$R$91=13)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=0)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2))+($R$34:$R$91=23)*((ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=1)+(ОСТАТ(ЯЧЕЙКА("столбец";B28)-ЯЧЕЙКА("столбец";$B$28);3)=2))+($R$34:$R$91=123)+$Q$31>0));1)

Начав осваивать пользовательские функции смог упростить до вот такого
Код
=МОИТблАртШт(Край;Тбл_Перекл;Тбл_Цвет;Тбл_Вкл;Тбл_Арт;Тбл_123)

[vba]
Код
Function МОИТблАртШт(Krai As Range, Vsego As Range, ArtCvet As Range, ArtVkl As Range, TabArt As Range, Art123 As Range) As Long
    Dim oX&, oY&, oZ&, KC As Long
    KC = Application.Caller.Column - Krai.Column
    oZ = 2
    Do While KC > 3
        KC = KC - 3
        oZ = oZ + 1
    Loop
    oX = Choose(KC, 1, 4, 9)
    For oY = 2 To TabArt.Rows.Count - 1
        If (ArtVkl.Cells(oY) = "+" Or Vsego) _
        And TabArt.Cells(oY, oX) = ArtCvet.Cells(oZ) _
        And Art123.Cells(oY) Like "*" & KC & "*" _
        Then МОИТблАртШт = МОИТблАртШт + 1
    Next oY
End Function
[/vba]
С гипссылкой цель та же, превратить функции, вычисляющие адрес столбцов, из этих
Код
="#"&ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ(Закреп)+7*ПОИСКПОЗ(Избр▐;Список;0);4)&":"&АДРЕС(1;СТОЛБЕЦ(Закреп)+7+7*ПОИСКПОЗ(Избр▐;Список;0);4);1;)

вот в это
Код
=МОИДЛЯГИП(СТОЛБЕЦ(Закреп)+7*ПОИСКПОЗ(Избр▐;Список;0);7)

[vba]
Код
Function МОИДЛЯГИП(NomerStrStl As Long, Optional Otstup As Long, Optional StrILIStl As Byte) As String
    Dim AdrsT1$, AdrsT2$, AdrsN1&, AdrsN2&
    AdrsN1 = NomerStrStl
    AdrsN2 = NomerStrStl + Otstup
    '=========================
    If StrILIStl = 0 Then
        Do While AdrsN1 > 0
            oX = Int((AdrsN1 - 1) / 26)
            oY = (AdrsN1 - 1) Mod 26
            AdrsT1 = Chr(oY + 65) & AdrsT1
            AdrsN1 = oX
        Loop
        If Otstup > 0 Then
            Do While AdrsN2 > 0
                oX = Int((AdrsN2 - 1) / 26)
                oY = (AdrsN2 - 1) Mod 26
                AdrsT2 = Chr(oY + 65) & AdrsT2
                AdrsN2 = oX
            Loop
        Else: AdrsT2 = AdrsT1
        End If
    Else: AdrsT1 = AdrsN1: AdrsT2 = AdrsN2
    End If
    '=========================
    МОИДЛЯГИП = "#" & AdrsT1 & ":" & AdrsT2
End Function
[/vba]
И это работает, гипссылка переносит куда надо, но лишь до тех пор пока в внутри гипссылки, но за пределами моей функции я не начинаю использовать именованные диапазоны.
А использовать их приходиться так как диапазонов много и часть из них скрывается, так что когда возникает необходимость что либо редактировать в документе проще указывать имена диапазонов.
Я обычно сам страюсь способы решения моих задач в инете, и зачастую удачно, но кагда возникают такие мелочи недающие мне получить то что я хочу от функционала, меня это вводит в ступор.
Поэтому и интересует можно ли как то заставить гипссылку работать с моей функцией и именованными диапазонами. Обходные пути явно будуд только усложнять задачу и, даже если надо будет, сам смогу их найти,
но тогда это не даст мне ответа на мой вопрос.

Автор - ZetMenChavo
Дата добавления - 19.07.2022 в 11:14
_Igor_61 Дата: Вторник, 19.07.2022, 15:13 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
можно ли как то заставить гипссылку работать с моей функцией и именованными диапазонами

Я не знаю :(
 
Ответить
Сообщение
можно ли как то заставить гипссылку работать с моей функцией и именованными диапазонами

Я не знаю :(

Автор - _Igor_61
Дата добавления - 19.07.2022 в 15:13
boa Дата: Вторник, 19.07.2022, 23:56 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
Здравствуйте, ZetMenChavo и Игорь
С момента появления первого поста в этой теме, попробовал "включиться", но первый тест оказался неудачным и я ошибку не понял.
Решил подождать готового решения, и подписался на тему.
Но решение в теме не "родилось", поэтому попытался еще раз разобраться "что же не так".

Функция ГИПЕРССЫЛКА имеет 2 аргумента адрес и [имя], причем, 2-й не обязательный.
Тесты показали, что если один из аргументов содержит Пользовательское имя или функцию, то гиперссылка РАБОТАЕТ,
а если оба аргумента включают Пользовательское имя(функцию), не зависимо от формата данных аргумента [имя] (Текст/число), переход по ссылке НЕ работает.
Думаю, это глюк майкрософта, т.к. описание такого поведения на официальных сайтах не нашел.

Решение: не указывать второй аргумент или указывать его средствами и диапазонами Excel или статично ((
ну или требовать от MS исправления глюка ))




Сообщение отредактировал boa - Среда, 20.07.2022, 00:08
 
Ответить
СообщениеЗдравствуйте, ZetMenChavo и Игорь
С момента появления первого поста в этой теме, попробовал "включиться", но первый тест оказался неудачным и я ошибку не понял.
Решил подождать готового решения, и подписался на тему.
Но решение в теме не "родилось", поэтому попытался еще раз разобраться "что же не так".

Функция ГИПЕРССЫЛКА имеет 2 аргумента адрес и [имя], причем, 2-й не обязательный.
Тесты показали, что если один из аргументов содержит Пользовательское имя или функцию, то гиперссылка РАБОТАЕТ,
а если оба аргумента включают Пользовательское имя(функцию), не зависимо от формата данных аргумента [имя] (Текст/число), переход по ссылке НЕ работает.
Думаю, это глюк майкрософта, т.к. описание такого поведения на официальных сайтах не нашел.

Решение: не указывать второй аргумент или указывать его средствами и диапазонами Excel или статично ((
ну или требовать от MS исправления глюка ))

Автор - boa
Дата добавления - 19.07.2022 в 23:56
boa Дата: Среда, 20.07.2022, 00:23 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
Может можно как то свою ГИПЕРССЫЛКУ в ВБА написать?

Пользовательские функции не могут переходить "куда-то". Поэтому, отбросьте эту идею.
Либо обработка событий листа макросом( о чем Игорь писал выше), либо только вычисление.




Сообщение отредактировал boa - Среда, 20.07.2022, 00:24
 
Ответить
Сообщение
Может можно как то свою ГИПЕРССЫЛКУ в ВБА написать?

Пользовательские функции не могут переходить "куда-то". Поэтому, отбросьте эту идею.
Либо обработка событий листа макросом( о чем Игорь писал выше), либо только вычисление.

Автор - boa
Дата добавления - 20.07.2022 в 00:23
ZetMenChavo Дата: Среда, 20.07.2022, 11:42 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Цитата
Думаю, это глюк майкрософта, т.к. описание такого поведения на официальных сайтах не нашел

boa, Спасибо что замарочились с моим вопросом :) . Жаль что Эксель с таким обилием возможностей порой не может точно сделать что надо из-за недоделки Майкросовцев.
Имя гипссылок я для условного форматирования использую, да и просто чтоб эстетичный текст стоял а не просто адрес, так что обойтись тут без указании имени не смогу, в отличие от использования своей пользовательской функции.
Цитата
Пользовательские функции не могут переходить "куда-то". Поэтому, отбросьте эту идею

Это уже и своими силами выяснил, пока искал в инете "создание гипссылок макросом". Забавно что стандартная гипссылка существоет, а способа создать свою её версию макросом не завезли.


Сообщение отредактировал ZetMenChavo - Среда, 20.07.2022, 11:42
 
Ответить
Сообщение
Цитата
Думаю, это глюк майкрософта, т.к. описание такого поведения на официальных сайтах не нашел

boa, Спасибо что замарочились с моим вопросом :) . Жаль что Эксель с таким обилием возможностей порой не может точно сделать что надо из-за недоделки Майкросовцев.
Имя гипссылок я для условного форматирования использую, да и просто чтоб эстетичный текст стоял а не просто адрес, так что обойтись тут без указании имени не смогу, в отличие от использования своей пользовательской функции.
Цитата
Пользовательские функции не могут переходить "куда-то". Поэтому, отбросьте эту идею

Это уже и своими силами выяснил, пока искал в инете "создание гипссылок макросом". Забавно что стандартная гипссылка существоет, а способа создать свою её версию макросом не завезли.

Автор - ZetMenChavo
Дата добавления - 20.07.2022 в 11:42
boa Дата: Среда, 20.07.2022, 17:45 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
ZetMenChavo,
макросом можно.
функцией нельзя

можно, например обрабатывать значение ячейки при получении фокуса и подменять его на гипперрсылку
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 6 And Target.Count = 1 Then
On Error Resume Next
      Me.Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:=Target.Value, TextToDisplay:=Target.Value
On Error GoTo 0
    End If
End Sub
[/vba]
К сообщению приложен файл: Hyperlinks.xlsb (15.1 Kb)




Сообщение отредактировал boa - Среда, 20.07.2022, 17:46
 
Ответить
СообщениеZetMenChavo,
макросом можно.
функцией нельзя

можно, например обрабатывать значение ячейки при получении фокуса и подменять его на гипперрсылку
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 6 And Target.Count = 1 Then
On Error Resume Next
      Me.Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:=Target.Value, TextToDisplay:=Target.Value
On Error GoTo 0
    End If
End Sub
[/vba]

Автор - boa
Дата добавления - 20.07.2022 в 17:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Именованный диапазон и функция VBA в функции ГИПЕРССЫЛКА (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!