Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Can I register my own simple DLL functions in VBA?

47 views
Skip to first unread message

dwidavid...@yahoo.com

unread,
Oct 27, 2013, 6:59:19 PM10/27/13
to
Hi,

I have created by own simple DLL using C in VS 2010, which contains just one function.

Looking at some of the articles etc. on the web, it is suggested I can register this function in VBA using some code like this:

Sub VBARegisterFunction()

Dim sP As String, sDQ As String

sDQ = Chr(34) 'Double quotes

sP = ""
sP = sP & sDQ & "C:\Users\Owner\docs\vs2010\Projects\Test\Test.dll" & sDQ & ","
sP = sP & sDQ & "cube" & sDQ & ","
sP = sP & sDQ & "BB" & sDQ & ","
sP = sP & sDQ & "cube" & sDQ & ",,1"

Application.ExecuteExcel4Macro ("REGISTER(" & sP & ")")

End Sub

without going to the trouble of creating a full blown XLL, which is attractive just to get one simple function running.

When I run this code, I see no visible error, and I am aware that the function if successfully registered, is hidden. But I get #Value! errors when I try to reference the function in a cell.

Does anyone know, what I am doing wrong, or if this feature still works in Excel 2007/2010?

Thanks
David Wilkinson

dwidavid...@yahoo.com

unread,
Oct 29, 2013, 3:55:06 AM10/29/13
to
Using a post in microsoft.public.excel.programming and with the grateful help of witek I got this to work. This is what I did:

(1) Using Visual Studio Express 2010, I created a project called squareDLL consisting of:

square.c:

double _stdcall square (double x)
{
return x * x;
}

square.def:

LIBRARY "square"
EXPORTS
square

and stored it at this location:

C:\Users\Owner\Documents\Visual Studio 2010\Projects\squareDLL\Debug\squareDLL.dll

(2) In my Excel I setup:

Private Sub Workbook_Open()

Dim sParm As String, sDQ As String

sDQ = Chr(34) 'Double quotes

sParm = ""
sParm = sParm & sDQ & "C:\Users\Owner\Documents\Visual Studio 2010\Projects\squareDLL\Debug\squareDLL.dll" & sDQ & ","
sParm = sParm & sDQ & "square" & sDQ & ","
sParm = sParm & sDQ & "BB" & sDQ & ","
sParm = sParm & sDQ & "square" & sDQ & ",,1"

Application.ExecuteExcel4Macro ("REGISTER(" & sParm & ")")

End Sub

(3) I was then able to use the square function, in a cell in my worksheet, like this:

=square(C2)
=square(45)
0 new messages