ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   VBA function to xll function (https://www.excelbanter.com/excel-programming/358868-vba-function-xll-function.html)

RB Smissaert

VBA function to xll function
 
Could anybody tell me where I can find some simple tutorial how to convert a
VBA function to an .xll function?
I have the sample project from the book Professional Excel Development and I
can load that in VC6 ++.
It looks I can just add my function (converted to C) to this sample projects
and change a few other things in the Sample.c and Sample.def files.
I don't know anything about C though and I am trying to do this quickly
without learning some C fundamentals.

This is the function I would like to convert:

Function Framingham(Age As Long, _
SysBP As Long, _
TotChol As Double, _
HDL As Double, _
Optional Sex As String = "male", _
Optional Diabetes As String = "", _
Optional LVH As String = "", _
Optional Smoke As String = "", _
Optional Years As Long = 10) As Double

On Error GoTo ERROROUT

Dim dB0 As Double
Dim dB1 As Double
Dim dB2 As Double
Dim dB3 As Double
Dim dB4 As Double
Dim dB5 As Double
Dim dB6 As Double
Dim dB7 As Double
Dim dB8 As Double
Dim dB9 As Double
Dim dB10 As Double
Dim dTheta As Double
Dim dTheta1 As Double
Dim dMu As Double
Dim dU As Double
Dim dS As Double
Dim dProb As Double
Dim btSex As Byte
Dim btDiabetes As Byte
Dim btLVH As Byte
Dim btSmoke As Byte
If Age < 35 Or Age 75 Or _
SysBP < 50 Or SysBP 300 Or _
TotChol < 1 Or TotChol 30 Or _
HDL < 0.2 Or HDL 10 Or _
Years 10 Then
Framingham = 0
Exit Function
End If
dB0 = 15.5305
dB1 = 28.4441
dB2 = -1.4792
dB3 = -14.4588
dB4 = 1.8515
dB5 = -0.9119
dB6 = -0.2767
dB7 = -0.7181
dB8 = -0.1759
dB9 = -0.1999
dB10 = -0.5865
dTheta = 0.9145
dTheta1 = -0.2784
If UCase(Sex) = "FEMALE" Then btSex = 1
If UCase(Diabetes) = "YES" Then btDiabetes = 1
If UCase(LVH) = "YES" Then btLVH = 1
If UCase(Smoke) = "YES" Then btSmoke = 1
dMu = dB0 + _
dB1 * btSex + _
dB2 * Log(Age) + _
dB3 * Log(Age) * btSex + _
dB4 * Log(Age) ^ 2 * btSex + _
dB5 * Log(SysBP) + _
dB6 * btSmoke + _
dB7 * Log(TotChol / HDL) + _
dB8 * btDiabetes + _
dB9 * btDiabetes * btSex + _
dB10 * btLVH
dS = Exp(dTheta + (dTheta1 * dMu))
dU = (Log(Years) - dMu) / dS
dProb = 1 - Exp(-Exp(dU))
Framingham = Round(dProb * 100, 2)
Exit Function

ERROROUT:
Framingham = -1

End Function


Thanks for any advice.


RBS


RB Smissaert

VBA function to xll function
 
Ordered a copy of:
C++ for VB Programmers - Jonathan Morrison

That should set me on the way not only for xll programming but also for
regular dll's.

RBS

"RB Smissaert" wrote in message
...
Could anybody tell me where I can find some simple tutorial how to convert
a VBA function to an .xll function?
I have the sample project from the book Professional Excel Development and
I can load that in VC6 ++.
It looks I can just add my function (converted to C) to this sample
projects and change a few other things in the Sample.c and Sample.def
files.
I don't know anything about C though and I am trying to do this quickly
without learning some C fundamentals.

This is the function I would like to convert:

Function Framingham(Age As Long, _
SysBP As Long, _
TotChol As Double, _
HDL As Double, _
Optional Sex As String = "male", _
Optional Diabetes As String = "", _
Optional LVH As String = "", _
Optional Smoke As String = "", _
Optional Years As Long = 10) As Double

On Error GoTo ERROROUT

Dim dB0 As Double
Dim dB1 As Double
Dim dB2 As Double
Dim dB3 As Double
Dim dB4 As Double
Dim dB5 As Double
Dim dB6 As Double
Dim dB7 As Double
Dim dB8 As Double
Dim dB9 As Double
Dim dB10 As Double
Dim dTheta As Double
Dim dTheta1 As Double
Dim dMu As Double
Dim dU As Double
Dim dS As Double
Dim dProb As Double
Dim btSex As Byte
Dim btDiabetes As Byte
Dim btLVH As Byte
Dim btSmoke As Byte
If Age < 35 Or Age 75 Or _
SysBP < 50 Or SysBP 300 Or _
TotChol < 1 Or TotChol 30 Or _
HDL < 0.2 Or HDL 10 Or _
Years 10 Then
Framingham = 0
Exit Function
End If
dB0 = 15.5305
dB1 = 28.4441
dB2 = -1.4792
dB3 = -14.4588
dB4 = 1.8515
dB5 = -0.9119
dB6 = -0.2767
dB7 = -0.7181
dB8 = -0.1759
dB9 = -0.1999
dB10 = -0.5865
dTheta = 0.9145
dTheta1 = -0.2784
If UCase(Sex) = "FEMALE" Then btSex = 1
If UCase(Diabetes) = "YES" Then btDiabetes = 1
If UCase(LVH) = "YES" Then btLVH = 1
If UCase(Smoke) = "YES" Then btSmoke = 1
dMu = dB0 + _
dB1 * btSex + _
dB2 * Log(Age) + _
dB3 * Log(Age) * btSex + _
dB4 * Log(Age) ^ 2 * btSex + _
dB5 * Log(SysBP) + _
dB6 * btSmoke + _
dB7 * Log(TotChol / HDL) + _
dB8 * btDiabetes + _
dB9 * btDiabetes * btSex + _
dB10 * btLVH
dS = Exp(dTheta + (dTheta1 * dMu))
dU = (Log(Years) - dMu) / dS
dProb = 1 - Exp(-Exp(dU))
Framingham = Round(dProb * 100, 2)
Exit Function

ERROROUT:
Framingham = -1

End Function


Thanks for any advice.


RBS




All times are GMT +1. The time now is 05:22 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com