Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Calculation order

I just came across something interesting, and wonder if someone can point me to
a discussion.

I noted with regard to a UDF I have to convert Roman to Arabic numerals, that
the function call seems to affect the worksheet calculation order.

The original function call was:

Function Arabic (rg as range) as Long


With this call, given the following:

A1: some arabic number
A2: =ROMAN(A1)

A3: =Arabic(A2)

A3 appeared to calculate first. So that making a change in A1 would result in
A3 showing the number that was PREVIOUSLY in A1 instead of the current number.

Moving the cells around did not make a difference.

What did make a difference was eliminating the Type specification (or changing
the type specification to Variant) for the variable in the function call:

Function Arabic (rg) as Long

or

Function Arabic (rg as variant) as long

--ron
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default Calculation order

Hi Ron.

See the discussion by Charles Williams at:

Excel's Calculation Process
http://www.decisionmodels.com/calcsecretsc.htm


---
Regards,
Norman


"Ron Rosenfeld" wrote in message
...
I just came across something interesting, and wonder if someone can point
me to
a discussion.

I noted with regard to a UDF I have to convert Roman to Arabic numerals,
that
the function call seems to affect the worksheet calculation order.

The original function call was:

Function Arabic (rg as range) as Long


With this call, given the following:

A1: some arabic number
A2: =ROMAN(A1)

A3: =Arabic(A2)

A3 appeared to calculate first. So that making a change in A1 would
result in
A3 showing the number that was PREVIOUSLY in A1 instead of the current
number.

Moving the cells around did not make a difference.

What did make a difference was eliminating the Type specification (or
changing
the type specification to Variant) for the variable in the function call:

Function Arabic (rg) as Long

or

Function Arabic (rg as variant) as long

--ron



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Calculation order

On Fri, 4 May 2007 13:08:50 +0100, "Norman Jones"
wrote:

Hi Ron.

See the discussion by Charles Williams at:

Excel's Calculation Process
http://www.decisionmodels.com/calcsecretsc.htm


---
Regards,
Norman



Norman,

Thanks for that reference.

It is useful, but I was not able to find the explanation for what I am seeing.

He notes that there is a problem with a UDF not calculating if the precedent
cell is not referred to in the Function argument. However, in my instance, it
seems to be referred to in both types of function calls:

Function Arabic (rg as range) as Long

or

Function Arabic (rg) as Long

or (equivalent)

Function Arabic (rg as Variant) as Long.

Yet the first calculates before "rg" has recalculated, and the latter
calculates after "rg" has calculated.

Within the function, rg seems to be returning a range object in both instances.
--ron
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Calculation order

On Fri, 4 May 2007 13:08:50 +0100, "Norman Jones"
wrote:

Hi Ron.

See the discussion by Charles Williams at:

Excel's Calculation Process
http://www.decisionmodels.com/calcsecretsc.htm


---
Regards,
Norman



Hmmm,

Trying out Gary's S suggestion, which works, it seems what is happening is
that, for some reason, if I use rg.text within the UDF, it screws up the
dependency tree. Whereas if I use rg.value (or just rg) within the UDF, it
does not.

Strange.
--ron
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default Calculation order

Hi Ron,

'------------------
Hmmm,

Trying out Gary's S suggestion, which works, it seems what is happening is
that, for some reason, if I use rg.text within the UDF, it screws up the
dependency tree. Whereas if I use rg.value (or just rg) within the UDF, it
does not.

Strange.
'------------------

In Charles W's discussion of UDF's, did you see
his comments on the use of cell properties other than .
value or .formula?

See:

Referencing cell formatting properties
http://www.decisionmodels.com/calcsecretsj.htm

---
Regards,
Norman




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Calculation order

On Fri, 4 May 2007 14:22:38 +0100, "Norman Jones"
wrote:

Hi Ron,

'------------------
Hmmm,

Trying out Gary's S suggestion, which works, it seems what is happening is
that, for some reason, if I use rg.text within the UDF, it screws up the
dependency tree. Whereas if I use rg.value (or just rg) within the UDF, it
does not.

Strange.
'------------------

In Charles W's discussion of UDF's, did you see
his comments on the use of cell properties other than .
value or .formula?

See:

Referencing cell formatting properties
http://www.decisionmodels.com/calcsecretsj.htm

---
Regards,
Norman


Here's what I saw and, when I read it, I didn't think it was applicable.

-----------------------------------------------
Referencing cell formatting properties

If your UDF references cell properties other than .value or .formula
(ie .Bold) there are some occasions when these properties may be undefined when
your UDF is evaluated. One such occasion is renaming a worksheet in automatic
mode. If this happens you may need to explicitly recalculate your function.
--------------------------------------------

The properties are not undefined. What is happening, according to my
experimentation (using breakpoints within the UDF), is that the UDF is being
calculated prior to the cell referenced in the Function declaration, and is not
recalculated after the precedent cell is calculated.

Within the UDF, changing rg.text to rg.value causes the function precedent cell
to be calculated first.


By the way, I sent a note to Charles W and I seemed to have piqued his
interest. He's planning to look into it.


--ron
  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,058
Default Calculation order

With regard to your Arabic function:

1. Dim rg as Range in the Header
2. Use rg.Value in place of rg.Text
3. insert Application.Volatile near the top
--
Gary''s Student - gsnu200718


"Ron Rosenfeld" wrote:

I just came across something interesting, and wonder if someone can point me to
a discussion.

I noted with regard to a UDF I have to convert Roman to Arabic numerals, that
the function call seems to affect the worksheet calculation order.

The original function call was:

Function Arabic (rg as range) as Long


With this call, given the following:

A1: some arabic number
A2: =ROMAN(A1)

A3: =Arabic(A2)

A3 appeared to calculate first. So that making a change in A1 would result in
A3 showing the number that was PREVIOUSLY in A1 instead of the current number.

Moving the cells around did not make a difference.

What did make a difference was eliminating the Type specification (or changing
the type specification to Variant) for the variable in the function call:

Function Arabic (rg) as Long

or

Function Arabic (rg as variant) as long

--ron

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Calculation order

On Fri, 4 May 2007 05:31:01 -0700, Gary''s Student
wrote:

With regard to your Arabic function:

1. Dim rg as Range in the Header
2. Use rg.Value in place of rg.Text
3. insert Application.Volatile near the top
--
Gary''s Student - gsnu200718



Thanks for that. Adds some insight into the issue.

Application.Volatile does not seem to be required.

For some reason, using rg.text within the UDF, with (rg as range) in the
header, screws up the dependency tree.

Either using rg as variant (or just rg) in the header; or using rg.value within
the UDF, does not screw up the dependency tree.

This seems like Odd behavior.
--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
calculation order Weaver Dean Excel Worksheet Functions 2 March 7th 07 02:03 PM
Order of calculation Louise Excel Discussion (Misc queries) 12 June 2nd 06 08:51 AM
Order of calculation RW Excel Discussion (Misc queries) 3 January 10th 06 02:10 PM
Order of Calculation John H W[_2_] Excel Programming 3 March 7th 05 11:22 PM
BIMDAS - Order of Calculation Atreides Excel Discussion (Misc queries) 20 February 23rd 05 02:33 AM


All times are GMT +1. The time now is 04:19 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"