View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
Lars Uffmann Lars Uffmann is offline
external usenet poster
 
Posts: 35
Default how to "synchronize" VBProjects & VBA.Userforms?

Hey everyone,

Excel is driving me wild again with stupid programming. I had the
following VBA code working just fine to create a UserForm on the fly:

'''''''''''''''''''''''''''''''''''
Sub createForm()

Dim hRootFrm As Object
Dim hOuterFrm As Object

Set hRootFrm = _
Application.VBE.ActiveVBProject.VBComponents.Add(v bext_ct_MSForm)

hRootFrm.Properties("ShowModal") = False

Set hOuterFrm = VBA.UserForms.Add(hRootFrm.Name)

Set frmProgress = hOuterFrmProgress
End Sub
'''''''''''''''''''''''''''''''''''

This worked well until I discovered my error. I created some other
workbooks on the fly, and it complained when adding the
hRootFrmProgress.Name to the UserForms collection:
"object required"

The crucial point is the line before that, where I create the MSForm as
part of the "ActiveVBProject". If a new workbook is created, it gets
created with an empty VBProject - and that is the "ActiveVBProject" then
- creating an object in that scope will make it impossible for that
object to be added to the UserForms collection in the scope of the VBA
object.

If the code is - for example - part of myWorkbook, and I use
Set hRootFrm = _
myWorkbook.VBProject.VBComponents.Add(vbext_ct_MSF orm)

then everything works fine. So apparently, the VBA object in the term
VBA.UserForms is a SCOPED expression - and it is scoped to a workbook.

Is it defined *anywhere* that the scope for the VBA object is always(!)
the same scope in which the code resides that is accessing the VBA
object? Because I have not found *any* possibility to specify which
scope's VBA object I want to access; yet there seem to be as many as
there are open workbooks (i.e. VBProjects).

Thanks & Best Regards,

Lars