В MSDN для "Студии" (локальная версия от января 2000) говорится, что для работы с коллекцией Controls любой формы можно воспользоваться следующим кодом:
- Код: Выделить всё
Debug.Print Application.VBE.SelectVBComponent.Designer.Controls.Count
То есть, подумал я, можно для какого-то компонента взять свойство Designer и работать с ним вот так:
- Код: Выделить всё
Dim VBInstance As VBIDE.VBE
...
Dim i As Long, f As Long
Dim Inst As VBComponent
For i = 1 To lstForms.ListCount
DoEvents
ls = ""
If lstForms.Selected(i - 1) = True Then
ls = lstForms.List(i - 1)
For f = 1 To _
VBInstance.ActiveVBProject.VBComponents.Count
DoEvents
Set Inst = _
VBInstance.ActiveVBProject.VBComponents.Item(i)
If Inst.Type = vbext_ct_VBForm Or _
Inst.Type = vbext_ct_VBMDIForm Then
If Inst.Name = ls Then
Inst.DesignerWindow.Visible = True
'эта строка вызывает ошибку,
'хотя вроде-бы должна работать
'MsgBox Inst.Designer.Controls.Count
End If
End If
Next f
End If
Next i
...
В этом коде lstForms - это обыкновенный ListBox с "загнанными" туда именами форм.
Если раскомментировать строку:
- Код: Выделить всё
MsgBox Inst.Designer.Controls.Count
то VB6 вылетит с ошибкой 438: Object doesn't support this property or method

Я испробовал и код, предлагаемый MSDN'ом. Во-первых, вопиющей ошибкой там было использование какого-то SelectVBObject вместо SelectedVBObject, а во-вторых, даже модифицированный код вгонял IDE в ступор.
В связи с этим извечный вопрос: что делать?