Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 76
Default Custom function problem

Hello All and Help! (Hope this makes sence)

=Sum2DProduct(ProfitMons,C$8,ProfitCodes,$BD11,Pro fit)
All ranges are within the same file.

I have the above custom function that works well when the file is active.
However, when a different file is active then the custom function returns a
value of '0'.

I'm guessing the function isn't referencing anything to do with the file it
is in, only the ranges selected for the funtion. And is applying itself to
the wrong active file.

How do I get the function to apply itself to the file it belongs to.

Thanks

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Custom function problem


What's the code in the custom function?


--
royUK

Hope that helps, RoyUK
For tips & examples visit my 'web site' (http://www.excel-it.com/)
------------------------------------------------------------------------
royUK's Profile: http://www.thecodecage.com/forumz/member.php?userid=15
View this thread: http://www.thecodecage.com/forumz/sh...ad.php?t=47040

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 76
Default Custom function problem

Public Function Sum2DProduct(Header1Range As Range, _
Header1Criteria As Range, _
Column1Range As Range, _
Column1Criteria As Range, _
DataRange As Range, _
Optional Header2Range As Variant, _
Optional Header2Criteria As Variant, _
Optional Header3Range As Variant, _
Optional Header3Criteria As Variant, _
Optional Column2Range As Variant, _
Optional Column2Criteria As Variant, _
Optional Column3Range As Variant, _
Optional Column3Criteria As Variant) As Double
'---
Dim aHeaderCell As Range
Dim aColumn1Cell As Range, aColumn2Cell As Range, aColumn3Cell As Range
Dim cCount As Integer, rCount As Integer
Dim result As Variant
Dim DataSheetVal As String
Dim DataRangeTopRow As Integer, DataRangeBotRow As Integer
Dim H1Match As Boolean, H2Match As Boolean, H3Match As Boolean, Continue
As Boolean
'---
dd$ = ActiveCell.Formula
For i% = 1 To Len(dd$)
If Mid(dd$, i%, 1) = "[" Then
dd1% = i% + 1

End If
If Mid(dd$, i%, 1) = "]" Then
dd2% = i%
tempstring = Mid(dd$, dd1%, dd2% - dd1%)
Exit For
End If
Next
result = 0
Continue = False
For Each aHeaderCell In Header1Range.Cells
If aHeaderCell.Value = Header1Criteria.Value Then
H1Match = True
cCount = aHeaderCell.Column
If IsMissing(Header2Range) = False Then
If Header2Criteria.Value < "" Then
If Header2Range.Cells(1, cCount).Value =
Header2Criteria.Value Then
H2Match = True
Else
H2Match = False
End If
Else
H2Match = True
End If
Else
H2Match = True
End If
If IsMissing(Header3Range) = False Then
If Header3Criteria.Value < "" Then
If Header3Range.Cells(1, cCount).Value =
Header3Criteria.Value Then
H3Match = True
Else
H3Match = False
End If
Else
H3Match = True
End If
Else
H3Match = True
End If
Else
H1Match = False
End If
If H1Match = True Then
If H2Match = True Then
If H3Match = True Then
Continue = True
Exit For
End If
End If
End If

Next
On Error GoTo errhelp:
If Continue = False Then
Sum2DProduct = 0
Exit Function
Else
DataRangeTopRow = DataRange.Row
DataRangeBotRow = DataRange.Rows.Count - 1 + DataRangeTopRow
DataSheetVal = DataRange.Worksheet.Name

C1TopRow = Column1Range.Row
C1BotRow = Column1Range.Rows.Count - 1 + C1TopRow
C1Column = Column1Range.Column
C1SheetVal = Column1Range.Worksheet.Name


If IsMissing(Column1Criteria) Then cr1 = True
If IsMissing(Column2Criteria) Then cr2 = True
If IsMissing(Column3Criteria) Then cr3 = True

If cr1 = True Then result = 0
If cr1 = False And cr2 = True And cr3 = False Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column3Range, Column3Criteria)
End If
If cr1 = False And cr2 = False And cr3 = False Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column2Range, Column2Criteria, Column3Range, Column3Criteria)
End If
If cr1 = False And cr2 = False And cr3 = True Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column2Range, Column2Criteria)
End If
If cr1 = False And cr2 = True And cr3 = True Then
Workbooks(tempstring).Activate
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address),
Sheets(C1SheetVal).Range(Range(Cells(DataRangeTopR ow, C1Column),
Cells(DataRangeBotRow, C1Column)).Address), Column1Criteria)
End If
Sum2DProduct = result
End If

Exit Function
errhelp:
If Err.Number = 9 Then
Else
MsgBox Err.Number & " " & Err.Description
End If
End Function




Hope this helps

"royUK" wrote:


What's the code in the custom function?


--
royUK

Hope that helps, RoyUK
For tips & examples visit my 'web site' (http://www.excel-it.com/)
------------------------------------------------------------------------
royUK's Profile: http://www.thecodecage.com/forumz/member.php?userid=15
View this thread: http://www.thecodecage.com/forumz/sh...ad.php?t=47040


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,420
Default Custom function problem

Never use Activecell, it points at the activesheet, use

Application.Caller.Formula

Why do you need this UDF, couldn't it be done by formulae?

--
__________________________________
HTH

Bob

"Cresta" wrote in message
...
Public Function Sum2DProduct(Header1Range As Range, _
Header1Criteria As Range, _
Column1Range As Range, _
Column1Criteria As Range, _
DataRange As Range, _
Optional Header2Range As Variant, _
Optional Header2Criteria As Variant, _
Optional Header3Range As Variant, _
Optional Header3Criteria As Variant, _
Optional Column2Range As Variant, _
Optional Column2Criteria As Variant, _
Optional Column3Range As Variant, _
Optional Column3Criteria As Variant) As Double
'---
Dim aHeaderCell As Range
Dim aColumn1Cell As Range, aColumn2Cell As Range, aColumn3Cell As Range
Dim cCount As Integer, rCount As Integer
Dim result As Variant
Dim DataSheetVal As String
Dim DataRangeTopRow As Integer, DataRangeBotRow As Integer
Dim H1Match As Boolean, H2Match As Boolean, H3Match As Boolean,
Continue
As Boolean
'---
dd$ = ActiveCell.Formula
For i% = 1 To Len(dd$)
If Mid(dd$, i%, 1) = "[" Then
dd1% = i% + 1

End If
If Mid(dd$, i%, 1) = "]" Then
dd2% = i%
tempstring = Mid(dd$, dd1%, dd2% - dd1%)
Exit For
End If
Next
result = 0
Continue = False
For Each aHeaderCell In Header1Range.Cells
If aHeaderCell.Value = Header1Criteria.Value Then
H1Match = True
cCount = aHeaderCell.Column
If IsMissing(Header2Range) = False Then
If Header2Criteria.Value < "" Then
If Header2Range.Cells(1, cCount).Value =
Header2Criteria.Value Then
H2Match = True
Else
H2Match = False
End If
Else
H2Match = True
End If
Else
H2Match = True
End If
If IsMissing(Header3Range) = False Then
If Header3Criteria.Value < "" Then
If Header3Range.Cells(1, cCount).Value =
Header3Criteria.Value Then
H3Match = True
Else
H3Match = False
End If
Else
H3Match = True
End If
Else
H3Match = True
End If
Else
H1Match = False
End If
If H1Match = True Then
If H2Match = True Then
If H3Match = True Then
Continue = True
Exit For
End If
End If
End If

Next
On Error GoTo errhelp:
If Continue = False Then
Sum2DProduct = 0
Exit Function
Else
DataRangeTopRow = DataRange.Row
DataRangeBotRow = DataRange.Rows.Count - 1 + DataRangeTopRow
DataSheetVal = DataRange.Worksheet.Name

C1TopRow = Column1Range.Row
C1BotRow = Column1Range.Rows.Count - 1 + C1TopRow
C1Column = Column1Range.Column
C1SheetVal = Column1Range.Worksheet.Name


If IsMissing(Column1Criteria) Then cr1 = True
If IsMissing(Column2Criteria) Then cr2 = True
If IsMissing(Column3Criteria) Then cr3 = True

If cr1 = True Then result = 0
If cr1 = False And cr2 = True And cr3 = False Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column3Range, Column3Criteria)
End If
If cr1 = False And cr2 = False And cr3 = False Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column2Range, Column2Criteria, Column3Range,
Column3Criteria)
End If
If cr1 = False And cr2 = False And cr3 = True Then
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address), Column1Range,
Column1Criteria, Column2Range, Column2Criteria)
End If
If cr1 = False And cr2 = True And cr3 = True Then
Workbooks(tempstring).Activate
result =
WorksheetFunction.SumIfs(Workbooks(tempstring).She ets(DataSheetVal).Range(Range(Cells(DataRangeTopRo w,
cCount), Cells(DataRangeBotRow, cCount)).Address),
Sheets(C1SheetVal).Range(Range(Cells(DataRangeTopR ow, C1Column),
Cells(DataRangeBotRow, C1Column)).Address), Column1Criteria)
End If
Sum2DProduct = result
End If

Exit Function
errhelp:
If Err.Number = 9 Then
Else
MsgBox Err.Number & " " & Err.Description
End If
End Function




Hope this helps

"royUK" wrote:


What's the code in the custom function?


--
royUK

Hope that helps, RoyUK
For tips & examples visit my 'web site' (http://www.excel-it.com/)
------------------------------------------------------------------------
royUK's Profile: http://www.thecodecage.com/forumz/member.php?userid=15
View this thread:
http://www.thecodecage.com/forumz/sh...ad.php?t=47040




  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,440
Default Custom function problem

What's the code of the function and how do you call it? What are the values
of the arguments?
What do you think it should return and why?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel

"Cresta" wrote in message
...
Hello All and Help! (Hope this makes sence)

=Sum2DProduct(ProfitMons,C$8,ProfitCodes,$BD11,Pro fit)
All ranges are within the same file.

I have the above custom function that works well when the file is active.
However, when a different file is active then the custom function returns
a
value of '0'.

I'm guessing the function isn't referencing anything to do with the file
it
is in, only the ranges selected for the funtion. And is applying itself to
the wrong active file.

How do I get the function to apply itself to the file it belongs to.

Thanks




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 76
Default Custom function problem

=Sum2DProduct(Header1Range ,Header1Criteria ,Column1Range ,Column1Criteria
,DataRange )

At the moment we use an array formula to do the searching throught a mass of
data and it takes quite a long time to do it. I have been asked to see if a
UDF can be developed to replace it and speed it up. The UDF below works when
the file is the active file and is much quicker. But it falls over when it is
not the active file and is being calculated using F9 calculating all open
workbooks.

We have looked at using the new SumIfs but I think I am correct in saying it
only works in one direction, although with many criterias along that
direction.
We need to scan along the top of the data to match the month (may be more
that one column) then down the codes on the right to match a code number (may
be more than one row). Then return the sum of the cells identified.

The logic of returning the data isn't the issue, it's the inability to have
the UDF perform when it isn't the active file.

Hope this helps
Any ideas





"Niek Otten" wrote:

What's the code of the function and how do you call it? What are the values
of the arguments?
What do you think it should return and why?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel

"Cresta" wrote in message
...
Hello All and Help! (Hope this makes sence)

=Sum2DProduct(ProfitMons,C$8,ProfitCodes,$BD11,Pro fit)
All ranges are within the same file.

I have the above custom function that works well when the file is active.
However, when a different file is active then the custom function returns
a
value of '0'.

I'm guessing the function isn't referencing anything to do with the file
it
is in, only the ranges selected for the funtion. And is applying itself to
the wrong active file.

How do I get the function to apply itself to the file it belongs to.

Thanks


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,440
Default Custom function problem

I suppose Bob's answer solved your problem?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel


"Cresta" wrote in message
...
=Sum2DProduct(Header1Range ,Header1Criteria ,Column1Range ,Column1Criteria
,DataRange )

At the moment we use an array formula to do the searching throught a mass
of
data and it takes quite a long time to do it. I have been asked to see if
a
UDF can be developed to replace it and speed it up. The UDF below works
when
the file is the active file and is much quicker. But it falls over when it
is
not the active file and is being calculated using F9 calculating all open
workbooks.

We have looked at using the new SumIfs but I think I am correct in saying
it
only works in one direction, although with many criterias along that
direction.
We need to scan along the top of the data to match the month (may be more
that one column) then down the codes on the right to match a code number
(may
be more than one row). Then return the sum of the cells identified.

The logic of returning the data isn't the issue, it's the inability to
have
the UDF perform when it isn't the active file.

Hope this helps
Any ideas





"Niek Otten" wrote:

What's the code of the function and how do you call it? What are the
values
of the arguments?
What do you think it should return and why?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel

"Cresta" wrote in message
...
Hello All and Help! (Hope this makes sence)

=Sum2DProduct(ProfitMons,C$8,ProfitCodes,$BD11,Pro fit)
All ranges are within the same file.

I have the above custom function that works well when the file is
active.
However, when a different file is active then the custom function
returns
a
value of '0'.

I'm guessing the function isn't referencing anything to do with the
file
it
is in, only the ranges selected for the funtion. And is applying itself
to
the wrong active file.

How do I get the function to apply itself to the file it belongs to.

Thanks



  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 76
Default Custom function problem

Unfortunately not.

I replaced the ActiveCell with Application.Caller but it didn't make any
difference

I also added Application.Volitile (True) as suggested elsewhere on the net.

Any other ideas.

Thanks





"Niek Otten" wrote:

I suppose Bob's answer solved your problem?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel


"Cresta" wrote in message
...
=Sum2DProduct(Header1Range ,Header1Criteria ,Column1Range ,Column1Criteria
,DataRange )

At the moment we use an array formula to do the searching throught a mass
of
data and it takes quite a long time to do it. I have been asked to see if
a
UDF can be developed to replace it and speed it up. The UDF below works
when
the file is the active file and is much quicker. But it falls over when it
is
not the active file and is being calculated using F9 calculating all open
workbooks.

We have looked at using the new SumIfs but I think I am correct in saying
it
only works in one direction, although with many criterias along that
direction.
We need to scan along the top of the data to match the month (may be more
that one column) then down the codes on the right to match a code number
(may
be more than one row). Then return the sum of the cells identified.

The logic of returning the data isn't the issue, it's the inability to
have
the UDF perform when it isn't the active file.

Hope this helps
Any ideas





"Niek Otten" wrote:

What's the code of the function and how do you call it? What are the
values
of the arguments?
What do you think it should return and why?

--
Kind regards,

Niek Otten
Microsoft MVP - Excel

"Cresta" wrote in message
...
Hello All and Help! (Hope this makes sence)

=Sum2DProduct(ProfitMons,C$8,ProfitCodes,$BD11,Pro fit)
All ranges are within the same file.

I have the above custom function that works well when the file is
active.
However, when a different file is active then the custom function
returns
a
value of '0'.

I'm guessing the function isn't referencing anything to do with the
file
it
is in, only the ranges selected for the funtion. And is applying itself
to
the wrong active file.

How do I get the function to apply itself to the file it belongs to.

Thanks



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
Error when adding custom help file to custom function Sabotuer99 Excel Programming 1 July 19th 08 01:46 PM
Creating a custom function to interpret another custom engine func Ryan Excel Programming 0 March 3rd 08 07:18 PM
Add-in - add a custom function to a custom group. Spencer Hutton Excel Programming 1 December 4th 07 02:53 PM
Custom Function #Name Problem cvolkert[_2_] Excel Programming 2 October 3rd 05 07:27 PM
custom function problem Carlton L Excel Programming 2 July 30th 05 09:46 PM


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