View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
Charles Williams Charles Williams is offline
external usenet poster
 
Posts: 968
Default Custom Functions in C/C++ against in VBA

Hi Deepak,

To make a C function you need the Excel 97 SDK (or equivalent), which you
can find online on the Microsoft site at
http://msdn.microsoft.com/library/de...97/edkfrnt.htm
and its framework
http://download.microsoft.com/downlo...S/Frmwrk32.exe

This will tell you (amongst other things) how to pass Excel ranges to C.

I would strongly advise against using multiple area ranges as input to a UDF
as Excel has a serious bug in handling these.
(see http://www.DecisionModels.com/calcsecretsj.htm). Use multiple range
arguments instead.

for I am advised that Excel VBA can read cells pretty quickly


This is not really correct.
There is a high overhead associated with each transfer of data from Excel to
VBA.
So if you are reading cells one-by-one into VBA its is extremely slow, but
if you read a large rectangular range into a variant variable it is
relatively fast (but C is faster)
(see http://www.DecisionModels.com/calcsecretsj.htm)

If all you are doing is some kind of lookup then the process of looping
through the variant array to find the answer using VBA will be fast compared
to the time needed to read the excel range into the array.


regards
Charles
______________________
Decision Models
FastExcel 2.1 now available
www.DecisionModels.com

"agarwaldvk " wrote in message
...
Hi Charles

Appreciate your quick response!

I am quite happy to use a complete C solution as you suggested.
However, the central issue here is how do I pass the contents of a
range of cells to a C function? This is further complicated by the fact
that this range can be multiple area range (with any number of range
areas hence better suited for a named range with multiple range areas
on one worksheet). Additionally, the cells even in one column can
contain mixed data types. So what I have done is created a named range
emcompassing the range of cells of interest.

With this being the fundamental requirement, is there a way to pass the
address of this Excel range to a C function. If there is, please let me
know for I do not know how to. To get around this limitation of mine,
what I was trying to do was read the contents of each of the cells in
the covered range (for I am advised that Excel VBA can read cells
pretty quickly) and store them in a VBA array of variants and then pass
this array to a C function and then harness the processing speed of C to
return the post calculation value.

Any further suggestions and does this now make the requirements any
clearer?


Best regards


Deepak Agarwal


---
Message posted from http://www.ExcelForum.com/