2014-12-20 5 views
1

하이퍼 링크를 편집하는 방법을 보았습니다. 그러나 사용자 지정 수식으로 사용할 때는 하이퍼 링크를 추가해야합니다.VBA UDF에 하이퍼 링크 추가

나는 # 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 

답변

1

UDF를 (사용자 정의 함수)와 같은 시트를 사용하려고하면 사람이, 내가 # VALUE 오류가 왜 어떤 아이디어가 있습니까 그들은하지 않을 수 있습니다 예 affect other cells 또는 다른 조작을 수행하십시오.
코드를 단계별로 실행하면 코드가 ...Hyperlinks.Add- 라인에서 중단되고 오류 값이 반환됩니다. VBA 하위 코드에 따라

+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

(더 나은 명확성을 위해 제거 된 코드의 중요하지 않은 부분) 새 하이퍼 링크를 추가, 또는 지정된 샘플 셀 "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 

당신이 할 수있는 (관절 조금 불분명) 프로젝트의 비즈니스 로직의 나머지 부분에 해당하는 사용자가 정의 할 수있는 기능 (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 

희망. 감사합니다