Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 36
Default Function behaviour, can someone explain please?

Hi Guys,

I have a custom function that finds a hyperlink/s in a cell.
It wasn't written by me but sourced on the web somewhere, unknown
origin.

Here is the code...

Function TextLink(cellT As Range, Optional defVal As Variant)

If (cellT.Range("A1").Hyperlinks.Count < 1) Then
TextLink = defVal
Else
TextLink = cellT.Range("A1").Hyperlinks(1).Address
End If
End Function


This works fine, however what it does do is seems to get called by
totally unrelated code in other worksheets in the same workbook. I
don't know why, and I would like to know why.

I have rewrote the code with this...

Function TextLink(cellT As Range, Optional defVal As Variant)

If (cellT.Offset(0, 0).Hyperlinks.Count < 1) Then
TextLink = defVal
Else
TextLink = cellT.Offset(0, 0).Hyperlinks(1).Address
End If
End Function

This also works but doesn't (after testing) seem to get called by other
seperate code in other worksheets in the same workbook.

Now in the first code the cellT range is A2 and the function is sat in
B2. I'm extracting the first 55 characters of the hyperlink. I'm using
this..

=LEFT(TextLink(A2,""),55)

Works ok. Returns an empty string if there's no hyperlink.

The problem as I see it is the .Range("A1") part of the original
function. Is it open to be called by any sheet at any time if A1 is
selected?

It isn't a problem while the code runs at normal speed, but when I'm
stepping through to debug I'm getting this function being called and
insisting on looping through itself possibly hundreds of times before I
get sick and have to end the debug.

I'm quite happy at the rate I'm learning VBA, but I'm getting stuck on
functions and their behaviour more and more often.

Can anyone shed any light on this please?

Thanks guys,

Ron
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 983
Default Function behaviour, can someone explain please?

All functions and sub procedures are by default public scope. If you want to
keep something from being called outside of a given module or sheet you
should declare it private. Good coding practice is to declare everything
private, unless it has to be public. The format should be:

Private MyFunctions(byval rngMyRange as range) as Variant

end function

With functions you should also declare what it is returning. In this case a
variant. By default functions return variants unless otherwise specified.

Without being able to see your other code I can not tell you why this would
be called unexpectedly. Try making the switch to private (if this function is
ont intended to be called outside of this sheet or modue) and let me know how
it goes.

HTH...

"Ron" wrote:

Hi Guys,

I have a custom function that finds a hyperlink/s in a cell.
It wasn't written by me but sourced on the web somewhere, unknown
origin.

Here is the code...

Function TextLink(cellT As Range, Optional defVal As Variant)

If (cellT.Range("A1").Hyperlinks.Count < 1) Then
TextLink = defVal
Else
TextLink = cellT.Range("A1").Hyperlinks(1).Address
End If
End Function


This works fine, however what it does do is seems to get called by
totally unrelated code in other worksheets in the same workbook. I
don't know why, and I would like to know why.

I have rewrote the code with this...

Function TextLink(cellT As Range, Optional defVal As Variant)

If (cellT.Offset(0, 0).Hyperlinks.Count < 1) Then
TextLink = defVal
Else
TextLink = cellT.Offset(0, 0).Hyperlinks(1).Address
End If
End Function

This also works but doesn't (after testing) seem to get called by other
seperate code in other worksheets in the same workbook.

Now in the first code the cellT range is A2 and the function is sat in
B2. I'm extracting the first 55 characters of the hyperlink. I'm using
this..

=LEFT(TextLink(A2,""),55)

Works ok. Returns an empty string if there's no hyperlink.

The problem as I see it is the .Range("A1") part of the original
function. Is it open to be called by any sheet at any time if A1 is
selected?

It isn't a problem while the code runs at normal speed, but when I'm
stepping through to debug I'm getting this function being called and
insisting on looping through itself possibly hundreds of times before I
get sick and have to end the debug.

I'm quite happy at the rate I'm learning VBA, but I'm getting stuck on
functions and their behaviour more and more often.

Can anyone shed any light on this please?

Thanks guys,

Ron

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 36
Default Function behaviour, can someone explain please?


Without being able to see your other code I can not tell you why this
would be called unexpectedly. Try making the switch to private (if
this function is ont intended to be called outside of this sheet or
modue) and let me know how it goes.

HTH...



Hi Jim,

Thanks for that.

I tried going 'private' with the function, which was in it's own module
with nothing else.

I then tried to run this code from a different module in the same
workbook...

Sub CopyCols()
Range("f2:h21").Select
Selection.Copy
Sheets("WEB QUERY").Select
Range("k2").Select
Selection.PasteSpecial paste:=xlPasteValuesAndNumberFormats
End Sub

The function was called at the Selection.PasteSpecial line.

Again the function looped seemingly infinitely, so I put in a counter in
the function and added the two extra lines to the above code...

Sub CopyCols()
testcount = 0
Range("f2:h21").Select
Selection.Copy
Sheets("WEB QUERY").Select
Range("k2").Select
Selection.PasteSpecial paste:=xlPasteValuesAndNumberFormats
MsgBox "there were " & testcount & " loops this time"
End Sub

On running this code again and again I got 467 loops then 263 loops and
then curiously got zero loops time after time.

I'm trying to reproduce the loops to see if I can pin down what triggers
the calling but am unable to at the minute.

I'll post on here if I come up with any sort of answer.

Is it possible to put the function code in the worksheet module to where it
pertains, so that it doesn't stray outside? Maybe on a Worksheet_Change
event?

Ron
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Please explain YIELDMAT function JoeU2004 Excel Worksheet Functions 9 September 10th 09 02:04 AM
Large function - Please explain Danny Excel Worksheet Functions 5 December 18th 07 08:34 PM
Please explain function/formula Tara H Excel Worksheet Functions 6 July 24th 06 07:16 PM
Custom Function behaviour? Ron[_28_] Excel Programming 7 December 30th 04 11:10 PM
Behaviour of VBA ROUND function Microsoft Forum Excel Programming 3 December 30th 04 04:16 PM


All times are GMT +1. The time now is 08:54 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"