Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Coring on calling VBA6 dll
I have this bit of code that cores excel. Is there something I am
doing wrong? Option Explicit Declare Function EbExecuteLine Lib "C:\Program Files\Common Files \Microsoft Shared\VBA\VBA6\VBACV20.dll" ( _ ByVal stStringToExec As Long, _ ByVal Unknownn1 As Long, _ ByVal Unknownn2 As Long, _ ByVal fCheckOnly As Long) As Long Public Function ExecuteLine(stCode As String, Optional bCheckOnly As Boolean = False) As Boolean Dim stCommand As String * 256 Dim lgPtr As Long stCommand = stCode lgPtr = StrPtr(stCommand) ExecuteLine = EbExecuteLine(lgPtr, 0&, 0&, Abs(bCheckOnly)) = 0 End Function Private Sub test1() ExecuteLine ("15 + 30") End Sub |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Coring on calling VBA6 dll
If you have a vb6 ActiveX you'd need to register it on the target machine,
eg with Regsrv32. The dll would also need at least one public class and method. Your Declare Function is for a C(++/#) dll but not a VB6. Instead you'll need to start by creating an instance of the class and (typically) attaching a reference to it. You can do that with CreateObject or, with late binding, use of 'New'. Dim mObjCls as Object on error resume next Set mObjCls = CreateObject("VBACV20.clsEntry") if not mObjCls is nothing then ExecuteLine = mObjCls.EbExecuteLine(lgPtr, 0&, 0&, Abs(bCheckOnly)) = 0 Assuming the dll is registered, set a reference to it in your vba project. Press F2 and in Object Browser Libraries look for your dll. Hopefully you will find "EbExecuteLine". Look for its container class name and substitute with clsEntry in the example. As, having set the reference, you can use Early binding and do something like this - Dim mObjCls as VBACV20.clsEntry ' manually type and look at intellisense Set mObjCls = New clsEntry etc Curiosity - what's the StrPtr(stCommand), if say a to get the address of something? in a normal module in the dll I'd be interested as to how that could be used Regards, Peter T "Tom Med" wrote in message ups.com... I have this bit of code that cores excel. Is there something I am doing wrong? Option Explicit Declare Function EbExecuteLine Lib "C:\Program Files\Common Files \Microsoft Shared\VBA\VBA6\VBACV20.dll" ( _ ByVal stStringToExec As Long, _ ByVal Unknownn1 As Long, _ ByVal Unknownn2 As Long, _ ByVal fCheckOnly As Long) As Long Public Function ExecuteLine(stCode As String, Optional bCheckOnly As Boolean = False) As Boolean Dim stCommand As String * 256 Dim lgPtr As Long stCommand = stCode lgPtr = StrPtr(stCommand) ExecuteLine = EbExecuteLine(lgPtr, 0&, 0&, Abs(bCheckOnly)) = 0 End Function Private Sub test1() ExecuteLine ("15 + 30") End Sub |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
VBA6 cores when hitting Reset button on the VBA IDE | Excel Programming | |||
File Not Found: VBA6.DLL | Excel Discussion (Misc queries) | |||
FILE NOT FOUND: VBA6.DLL | Excel Discussion (Misc queries) | |||
File Not Found: VBA6.DLL | Excel Discussion (Misc queries) | |||
Checking for VBA5, not VBA6 | Excel Programming |