LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default Late binding to .XLA library??

Jim,
(First copy went out as direct email reply -- sorry. I have this bad habit
of pressing Ctrl+R when I should do Ctrl+G)

You wrote:
- Do not set a reference in the VB project. Result- No compile error.


If I don't set a reference, then I DO get a compile error.

In my example #1, which I left intact below, if there is no reference to
"MyAddIn" then I get a compile error in the clsLocalClass module. This
compile error hits BEFORE my Workbook_Open() event starts to run, and before
any code in clsLocalClass is ever called. The compile error hits even if I
declare objLocal as:

Dim objLocal As Object

That said, I have sidestepped the whole issue. For my specific needs, I
found that by trapping Application events in my .XLA, I was able to move all
code out of the data spreadsheet and keep it all in the .XLA. Now, if the
user installs the add-in they get a new toolbar with my tools, otherwise
they simply don't get the toolbar.

However, I've run into some issues maintaining state information when
multiple workbooks are referencing my add-in...I might be opening up a new
thread on that one.

Lee


"Jim Rech" wrote in message
...
However, the problem is that if VBA attempts to compile any code that

references the add-in BEFORE running the code that checks if the add-in
exists, the application will still halt with a compile error

Sorry, Lee, if I didn't spell out exactly what I was driving at...

- Do not set a reference in the VB project. Result- No compile error.
- At run time, check to see if Add-in exists.
- If yes, run code similar to my first post to create the reference.
- If no, disable your functions, etc.

--
Jim Rech
Excel MVP
"Lee S" wrote in message
...
| Bob / Jim,
|
| Thanks for the ideas.
|
| In my particular situation, I don't mind if the add-in does not exist --

I
| will simply disable any features that reference the add-in.
|
| However, the problem is that if VBA attempts to compile any code that
| references the add-in BEFORE running the code that checks if the add-in
| exists, the application will still halt with a compile error.
|
| EXAMPLE 1:
| In this example, only the local class clsLocalClass makes any reference

to
| the add-in. However if the add-in does not exist the Workbook_Open

event
| will never run because VBA will first attempt to compile BOTH the
| ThisWorkbook and clsLocalClass. If the add-in is not loaded then the
| clsLocalClass compile will fail, and Workbook_Open will never run.
|
| In ThisWorkbook class:
| ================================================== ==========
|
| Dim objLocal As clsLocalClass
|
| Sub Workbook_Open()
| Dim sResult
|
| On Error Resume Next
| sResult = Application.AddIns("MyAddIn").Installed
| If sResult Then
| '' Add-in exists -- make use of it
| Set objLocal = New clsLocalClass
| Else
| '' Add-in does not exist -- don't use features from Addin
| End If
| End Sub
|
| ------------------------------------------------------------
| In clsLocalClass (inside current project)
| ------------------------------------------------------------
| Dim objAddin As AddIn.clsSomething
|
| Private Sub Class_Initialize()
| Set objAddin = CreateSomething()
| End Sub
|
| ================================================== ==========
|
| EXAMPLE 2:
| The code below WILL ACTUALLY WORK, but it seems risky. I made two
changes:
| changed the objLocal definition to Object instead on clsLocalClass, and

I
| moved the New clsLocalClass line out of Workbook_Open. In this

particular
| scenario, VBA will not attempt to compile clsLocalClass, so the
| Workbook_Open event will run.
|
| It SEEMS RISKY trying to second-guess when/if VBA will decide to compile
| clsLocalClass. My real-world scenario is obviously more complex, and if
VBA
| were to attempt to compile clsLocalClass at any time for any reason, my
| application would halt.
|
| In ThisWorkbook:
| ================================================== ==========
| Dim objLocal As clsLocalClass
|
| Sub Workbook_Open()
| Dim sResult
|
| On Error Resume Next
| sResult = Application.AddIns("MyAddIn").Installed
| If sResult Then
| '' Add-in exists -- make use of it
| IntializeApp
| Else
| '' Add-in does not exist -- don't use features from Addin
| End If
| End Sub
|
| Private Sub IntializeApp()
| Set objLocal = New clsLocalClass
| End Sub
|
| ------------------------------------------------------------
| In clsLocalClass (inside current project)
| ------------------------------------------------------------
| Dim objAddin As AddIn.clsSomething
|
| Private Sub Class_Initialize()
| Set objAddin = CreateSomething()
| End Sub
|
| ================================================== ==========
|
|
|
| "Jim Rech" wrote in message
| ...
| How about:
|
| ThisWorkbook.VBProject.References.AddFromFile "c:\book1.xla"
|
| --
| Jim Rech
| Excel MVP
| "Lee S" wrote in message
| ...
| | In my spreadsheet I have code that references functions and classes

in
| an
| | .XLA file. When a user who does not have the .XLA file available
opens
| the
| | spreadsheet they see a compile error when the Workbook Open event
fires
| | (even though the Open event itself does not call or even directly
| reference
| | any XLA resources).
| |
| | This actually makes perfect sense to me ... but that does not mean

I
| have
| | to like it.
| |
| | Anyone know of a reliable way to prevent the compile error in this
| | situation?
| |
| | Something comparable to late binding for functions in an XLA library
| would
| | be nice. Then I could check if the library exists before I decide
| whether
| | to make the function calls.
| |
| | I have discovered that if arrange my code /just right/, I can avoid
the
| | error by convincing VBA not to compile the modules that reference

the
| | non-existent library -- however that is not reliable enough to

release
| to
| | the users.
| |
| | I am tempted to port my .XLA into a Visual Basic and compile it into
an
| | ActiveX DLL, but I figured I would check with the group to see if
anyone
| had
| | a good idea on this.
| |
| | Thanks!
| | Lee
| |
| |
|
|
|
|




 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
VB Extensibility library and "late binding" Dennis Excel Discussion (Misc queries) 0 March 30th 05 10:51 PM
Late Binding help, Please Bud Dean Excel Programming 5 September 24th 04 04:31 AM
Late Binding Todd Huttenstine[_3_] Excel Programming 3 April 30th 04 11:01 AM
VBA References - when is Office Object Library Reference set? Best practice re. Early/Late binding ... AndyB Excel Programming 5 April 22nd 04 02:11 PM
EARLY binding or LATE binding ? jason Excel Programming 6 February 26th 04 04:57 PM


All times are GMT +1. The time now is 12:54 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"