Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Calling a DLL Trouble
Ahhh, I got it Rob. Didn't want you to spend a lot of time writing back to
me. I had to do two things to get the events to fire 1.) I had to add the line in the module: Set RE.iConnect = iConnect 2.) I had to move the events (iConnect_Connected, etc.) out of the module and in to the class module. Thanks again for all the help! Trip "Trip Ives" wrote in message news:... Thanks so much Rob! I trully appreciate your help. I took your advice and set it up via a class file. It took a little finageling but I got it to work - for the most part. The only problem now is that I'm not getting the events of the DLL to fire. I was hoping you may be able to point me in the right direction... Here's what I have done: In a class file called RefcoExpressInterface I have: Public WithEvents iConnect As LIND_ACCESS_COMPONENTLib.LindAccess In a module called PublicMethods I have: Public RE As RefcoExpressInterface Public iConnect As LIND_ACCESS_COMPONENTLib.LindAccess Public iOrder As LIND_ACCESS_COMPONENTLib.iOrder Public iLeg As LIND_ACCESS_COMPONENTLib.iLeg Public iCheck As LIND_ACCESS_COMPONENTLib.iCheck Public iStatus As LIND_ACCESS_COMPONENTLib.iStatus etc... In another module called RefcoExpress I have: Sub InitializeRefcoExpress() Set RE = New RefcoExpressInterface Set iConnect = New LIND_ACCESS_COMPONENTLib.LindAccess Set iLeg = iConnect Set iOrder = iConnect Set iCheck = iConnect Set iStatus = iConnect iConnect.connect etc... End Sub Public Sub IConnect_Connected() ' ****** THIS WILL NOT FIRE ******* :-( ThisWorkbook.Worksheets("Home").ConnectionStatus = "Connected" ThisWorkbook.Worksheets("Home").REDisconnectReason = "" StartHeartBeatTimer End Sub Based on the log files written to by the DLL I am successfully connecting to the external server but the iConnect_Connected() event won't fire. Any ideas you may have (or anyone out there) would be greatly appreciated. Thanks again!! Trip "Rob Bovey" wrote in message ... Hi Trip, In Sheet2's declaration section I have.... Public WithEvents iConnect As LIND_ACCESS_COMPONENTLib.LindAccess This creates an automatic custom property of the Sheet2 class called iConnect. In ThisWorkbook I call a sub from Workbook_Open() that does... Set iConnect = New LIND_ACCESS_COMPONENTLib.LindAccess Because iConnect is a property of the Sheet2 class, you need to qualify it with its parent object name in order to use it from anywhere else, i.e.: Set Sheet2.iConnect = New...... But unless I'm missing something you haven't described in this post, I'd recommend against this architecture in general. When you have an object outside of Excel that you need to wrap in a class module you should use a VBA class module to do it rather than trying to slip it behind one of Excel's document object modules. Create a global object variable referencing that class in a standard code module and then you can use it from anywhere in your project once its initialized. -- Rob Bovey, Excel MVP Application Professionals http://www.appspro.com/ * Take your Excel development skills to the next level. * Professional Excel Development http://www.appspro.com/Books/Books.htm "Trip" wrote in message ... I'm sorry if this appears more than once, I've been having trouble posting to this group... Hello all, I could use some help here... I have a dll called LindAccessComponent.dll which is registered with Windows and included as a reference under Tools - References. I'm copying the code from VB6 to VBA but can't get it to work. In VB6 FormMain loads and does this in Form_Load()... Set iConnect = New LIND_ACCESS_COMPONENTLib.LindAccess Set iLeg = iConnect Set iOrder = iConnect Set iCheck = iConnect and in the form's declaration section there is this... Public WithEvents iConnect As LIND_ACCESS_COMPONENTLib.LindAccess Dim iOrder As LIND_ACCESS_COMPONENTLib.iOrder Dim iLeg As LIND_ACCESS_COMPONENTLib.iLeg Dim iCheck As LIND_ACCESS_COMPONENTLib.iCheck and as a result any procedure within the form that uses iConnect, etc. knows what iConnect is. In Excel VBA I have done this... In Sheet2's declaration section I have.... Public WithEvents iConnect As LIND_ACCESS_COMPONENTLib.LindAccess Public iOrder As LIND_ACCESS_COMPONENTLib.iOrder Public iLeg As LIND_ACCESS_COMPONENTLib.iLeg Public iCheck As LIND_ACCESS_COMPONENTLib.iCheck In ThisWorkbook I call a sub from Workbook_Open() that does... Set iConnect = New LIND_ACCESS_COMPONENTLib.LindAccess Set iLeg = iConnect Set iOrder = iConnect Set iCheck = iConnect BUT... whenever I try to use iConnect.anything I get an "Object Required" error. What am I doing wrong?? If I put Set iConnect = New LIND_ACCESS_COMPONENTLib.LindAccess in each proceudre it works - but I'm pretty sure that this is not the right way to do it. Any direction would be greatly appreciated! Thanks! |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Calling a DLL Trouble | Excel Programming | |||
Trouble calling Add-In Macros | Excel Programming | |||
Trouble with Calling a workbook | Excel Programming | |||
Calling an Add-In | Excel Discussion (Misc queries) | |||
Trouble calling macro | Excel Programming |