Morglor
Morglor

Reputation: 347

Creating a custom hyperlink function in excel

I have searched far and wide, but can't find an answer to this simple question. I want to make a custom function in excel which will create a hyperlink.

Excel has a built in hyperlink function that works like this:

=Hyperlink(link_location, display_text)

I want to create a function called CustomHyperlink which takes one parameter, and returns a hyperlink to a google query with that parameter. Just for the sake of the question, lets assume that the passed parameter is a alphanumeric string, with no spaces.

Essentially, calling

=CustomHyperlink("excel") 

should be the same as calling

=Hyperlink("http://www.google.com/search?q=excel", "excel")

This seems like such a simple task, but I absolutely cannot find a way to make this function.

Can anyone offer some quick help?

Upvotes: 2

Views: 16493

Answers (4)

chris neilsen
chris neilsen

Reputation: 53127

I can offer a partial solution, one that will update an existing hyperlink. This only makes sence if you are using it like, say

CustomHyperlink(A1)

were A1 contains the required serch term

To use,

  1. enter your UDF formula in a cell, eg =CustomHyperlink(A1)
  2. create a hyperlink on the cell (right click, Hyperlink...) . This can be any hyperlink, valid or invalid
  3. put the required search term in the referenced cell, eg in A1 put excel

When the UDF runs it will update the hyperlink to Google the entered search term

Function CustomHyperlink(Term As String) As String
    Dim rng As Range

    Set rng = Application.Caller
    CustomHyperlink = Term

    If rng.Hyperlinks.Count > 0 Then
        rng.Hyperlinks(1).Address = "http://www.google.com/search?q=" & Term
    End If
End Function

Upvotes: 1

Lunatik
Lunatik

Reputation: 3948

You can't do this directly for the reasons creamyegg suggests, but there is a way to achieve the functionality albeit with a bit of a performance consideration.

You could use the Worksheet_Change event to track for the presence of your UDF then process the hyperlink addition there.

You would need to set up an empty function to allow this to happen, otherwise Excel will throw an error whenever you entered =CustomHyperlink... in a cell.

The below should work, not really had time to test.

Private Sub worksheet_change(ByVal target As Range)
    Dim SearchValue As String
    If LCase(Left(target.Formula, 16)) = "=customhyperlink" Then
        SearchValue = Mid(target.Formula, 19, Len(target.Formula) - 20)
        target.Value = SearchValue
        target.Hyperlinks.Add target, "http://www.google.com/search?q=" & SearchValue, ,     "Search Google for " & SearchValue, SearchValue
    End If
End Sub

The performance consideration is of course the volatile Worksheet_Change event as this can really kill large, complex workbooks.

Upvotes: 0

markblandford
markblandford

Reputation: 3193

Nice idea although this isn't possible.

You seem to want to have the formula of the cell as one thing (your custom function call) and yet have the value as another (the hyperlink / URL) which simply isn't possible.

The correct way through VBA to add a hyperlink is to use the Hyperlinks property but it is not possible to call this property, through a Worksheet UDF (because of the reason above).

What is wrong with just using the the built-in =Hyperlink() worksheet function? You could effectively parameterise your URL as follows (where cell A1 = Excel):

=HYPERLINK("http://www.google.com/search?q="&A1)

Upvotes: 0

user1188835
user1188835

Reputation:

In VBA editor you can use

ThisWorkbook.FollowHyperlink Address:=(strWebsite), NewWindow:=True

Which will take you to that specific website, and just build a function around that to navigate you to the site you need.

Upvotes: 0

Related Questions