2014-12-20 2 views
1

Я видел, как редактировать гиперссылку, но мне нужно добавить гиперссылку при использовании в качестве пользовательской формулы.Добавить гиперссылку в VBA UDF

Я получаю ошибку #VALUE, и я не уверен, почему. Кто-нибудь есть какие-либо идеи, почему я получаю ошибку #VALUE когда я пытаюсь использовать его в простыню, как =testit39()

Public Function testit39() As String 
Application.Volatile 
Dim rng As range, milestoneinfo As String, milestonesymbol As String 

Set rng = Application.Caller 
milestoneinfo = "info" 
milestonesymbol = "symbol" 
If rng.Hyperlinks.Count > 0 Then 
    rng.Hyperlinks(1).address = "" 
    rng.Hyperlinks(1).screentip = milestoneinfo 
    Else 
    ThisWorkbook.ActiveSheet.Hyperlinks.Add Anchor:=rng, _ 
           address:="", _ 
           screentip:=milestoneinfo 

    rng.Hyperlinks(1).screentip = milestoneinfo 
    End If 

testit39 = milestonesymbol 
End Function 

ответ

2

Я нашел способ, который не осложненный благодаря этому замечательному учебнику ..

http://optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.html

Так по существу вы положили его в гиперссылке и вы вольны поступать так, как вам угодно. .

=hyperlink(testit39(), "Wahoo it works!") 
1

UDFs (определяемые пользователем функции) разрешено только возвращать значение, они не могут например affect other cells или делать другие манипуляции.
Когда вы совершите однократное выполнение кода, вы увидите, что он прерывается на линии ...Hyperlinks.Add (и возвращает значение ошибки).

+0

это на самом деле возможно, но требует сложных обходных решений. http://stackoverflow.com/questions/8520732/i-dont-want-my-excel-add-in-to-return-an-array-instead-i-need-a-udf-to-change – brettdj

+0

Не сложно если вы используете функцию гиперссылки. http://optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.html – Wickey312

0

После VBA Sub фрагмент кода позволяет добавлять новые гиперссылке или редактирование существующих в указанном образце ячейки «A1» (несущественные часть кода была удалена для большей ясности):

Public Sub AddOrEditHyperlink(milestonesymbol As String) 
    Dim rng As Range, milestoneinfo As String 
    'test range 
    Set rng = Range("A1") 
    'sample properties 
    milestoneinfo = "info" 
    'if Hyperlink exists, display "Edited" 
    If rng.Hyperlinks.Count > 0 Then 
     rng.Hyperlinks(1).Address = "" 
     rng.Hyperlinks(1).ScreenTip = milestoneinfo 
     rng.Hyperlinks(1).TextToDisplay = "Edited Hyperlink" 
    Else 'if Hyperlink does not exist, add and display "New" 
     rng.Hyperlinks.Add _ 
     Anchor:=rng, _ 
     Address:="", _ 
     ScreenTip:=milestoneinfo, _ 
     TextToDisplay:="New Hyperlink" 
    End If 
End Sub 

Вы можете называют это Sub из функции, которые вы можете определить (UDF), соответствующую остальную часть бизнеса-логику вашего проекта (который немного неясно сочлененный):

Public Function testit39() As String 
    Application.Volatile 
    Dim rng As Range, milestoneinfo As String, milestonesymbol As String 
    Call AddOrEditHyperlink("some Symbol") 
    testit39 = milestonesymbol 
End Function 

Надеется, что это поможет. С наилучшими пожеланиями

Смежные вопросы