jjj9979, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума - Оформите формулу тегами (в режиме правки поста выделите формулу и нажмите кнопку fx, пояснялка здесь) - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
jjj9979, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 500 кб согласно п.3 Правил форума - Оформите формулу тегами (в режиме правки поста выделите формулу и нажмите кнопку fx, пояснялка здесь) - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
[sub] да, извините прикрепил к этому сообщению файл с примером в этом файле одна ссылка (верхняя) ОБЫЧНАЯ другая (нижняя) сформированная через ФОРМУЛУ и два макроса, один МОЙ, который я писал в первом сообщении, а другой макрос из ФОРУМА, НО нижнюю ссылку (сформированную формулой) не открывает ни один ни другой макрос подскажите ПОЖАЛУЙСТА что дописать в макрос, чтобы нижняя ссылка этим макросом открывалась? СПАСИБО
[sub] да, извините прикрепил к этому сообщению файл с примером в этом файле одна ссылка (верхняя) ОБЫЧНАЯ другая (нижняя) сформированная через ФОРМУЛУ и два макроса, один МОЙ, который я писал в первом сообщении, а другой макрос из ФОРУМА, НО нижнюю ссылку (сформированную формулой) не открывает ни один ни другой макрос подскажите ПОЖАЛУЙСТА что дописать в макрос, чтобы нижняя ссылка этим макросом открывалась? СПАСИБОjjj9979
В Вашем примере из файла в функции запишите так: [vba]
Код
FormulaHyperlink = Range("A1")
[/vba] У меня работает. Другой вопрос - как передавать в функцию Range. Через цикл? Через Select? Но это уже другая тема. Вы же формулой на какие-то ячейки ссылаетесь, отсюда и пляшите P.S. Кросс пользы не принес ООО, пробуйте: [vba]
Код
Sub Макрос_с_форума() Url$ = ActiveCell.Value If Len(Url$) Then ThisWorkbook.FollowHyperlink Url$ Else Url$ = ActiveCell.Value End If End Sub Function FormulaHyperlink(ByRef cell As Range) As String If cell.HasFormula And (cell.Hyperlinks.Count = 0) Then If cell.Formula Like "=HYPERLINK" & "*" Then FormulaHyperlink = ActiveCell.Value End If End If End Function
[/vba] В сообщении сверху проще. И нафига я полез с кодом ТС-а разбираться? Он на Планете просит готовый файл...
В Вашем примере из файла в функции запишите так: [vba]
Код
FormulaHyperlink = Range("A1")
[/vba] У меня работает. Другой вопрос - как передавать в функцию Range. Через цикл? Через Select? Но это уже другая тема. Вы же формулой на какие-то ячейки ссылаетесь, отсюда и пляшите P.S. Кросс пользы не принес ООО, пробуйте: [vba]
Код
Sub Макрос_с_форума() Url$ = ActiveCell.Value If Len(Url$) Then ThisWorkbook.FollowHyperlink Url$ Else Url$ = ActiveCell.Value End If End Sub Function FormulaHyperlink(ByRef cell As Range) As String If cell.HasFormula And (cell.Hyperlinks.Count = 0) Then If cell.Formula Like "=HYPERLINK" & "*" Then FormulaHyperlink = ActiveCell.Value End If End If End Function
[/vba] В сообщении сверху проще. И нафига я полез с кодом ТС-а разбираться? Он на Планете просит готовый файл..._Igor_61
Игорь (_Igor_61) Вы молодец спасибо БОЛЬШОЕ всё работает вы на другой форум написали тоже (но тот ваш ответ я только что увидел, то есть уже после того как отработал ваш ответ с готовым макросом на этом форуме) СПАСИБО ещё раз Игорь СПАСИБО
Игорь (_Igor_61) Вы молодец спасибо БОЛЬШОЕ всё работает вы на другой форум написали тоже (но тот ваш ответ я только что увидел, то есть уже после того как отработал ваш ответ с готовым макросом на этом форуме) СПАСИБО ещё раз Игорь СПАСИБОjjj9979
честно говоря так и не понял для чего там удф. в макрос (сооб. №5) добавить обработчик ошибки и все.
а так для разнообразия (может кому пригодится) не оптимизировал [vba]
Код
Sub u_18() On Error Resume Next b = Selection.Formula c = Selection.Value i = InStr(b, "=HYPERLINK(") If i > 0 Then d = Len(b) - 1 For e = 2 To d f = Right(Left(b, d), e) g = Application.IfError(Evaluate(f), "") If g = c Then Exit For Next If e < d - 12 Then h = Evaluate(Mid(b, 12, d - 12 - e)) Else h = Evaluate(Mid(b, 12, d - 11)) End If Else h = c End If With CreateObject("WScript.Shell") .Run h End With End Sub
[/vba]
честно говоря так и не понял для чего там удф. в макрос (сооб. №5) добавить обработчик ошибки и все.
а так для разнообразия (может кому пригодится) не оптимизировал [vba]
Код
Sub u_18() On Error Resume Next b = Selection.Formula c = Selection.Value i = InStr(b, "=HYPERLINK(") If i > 0 Then d = Len(b) - 1 For e = 2 To d f = Right(Left(b, d), e) g = Application.IfError(Evaluate(f), "") If g = c Then Exit For Next If e < d - 12 Then h = Evaluate(Mid(b, 12, d - 12 - e)) Else h = Evaluate(Mid(b, 12, d - 11)) End If Else h = c End If With CreateObject("WScript.Shell") .Run h End With End Sub
Наверное просто кусочек из какого-то проекта, где УДФ задействуется в разных макросах. Я вообще об этом даже не думал, просто заменил формулу на Value, посмотрел - работает :). Nic70y, Ваш макрос в три строчки и без разнообразия работает отлично, скорее всего я не все знаю, т.к. не профи, обязательны ли эти проверки если Value и так работает и с ссылкой и с формулой? Или есть какие-то подводные камни в этом?
Наверное просто кусочек из какого-то проекта, где УДФ задействуется в разных макросах. Я вообще об этом даже не думал, просто заменил формулу на Value, посмотрел - работает :). Nic70y, Ваш макрос в три строчки и без разнообразия работает отлично, скорее всего я не все знаю, т.к. не профи, обязательны ли эти проверки если Value и так работает и с ссылкой и с формулой? Или есть какие-то подводные камни в этом?_Igor_61