L
Lars Uffmann
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(vbext_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_MSForm)
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
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(vbext_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_MSForm)
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