ООП в VBA

Программирование на Visual Basic for Applications
grim
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 25.07.2005 (Пн) 9:33

ООП в VBA

Сообщение grim » 16.04.2009 (Чт) 15:24

Господа, хочу разобраться с ООП в VBA
Возник следующий вопрос - как можно вкладывать объекты друг в друга, т.е. допустим в экселе же существуют деревья объектов

application.workbook.sheet.cell...

А как допустим создать свой класс допустим Automobile и вложить в него другой объект например Engine у которого будут уже свойства. Чтобы потом ко всей этой конструкции обращаться Automobile("Dodge").Engine(1)...

Возможно кто-то просто посдкажет хорошую статью на эту тему, сам что-то не нашел.

PS не кидайтесь тухлыми помидорами я не проф программист, заранее спасибо

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ООП в VBA

Сообщение alibek » 16.04.2009 (Чт) 15:50

Делаешь Class1 с нужными методами и свойствами.
Делаешь Class2 с нужными методами и свойствами, одно из свойств будет ссылкой на инстанс Class1.
Делаешь Class3 с нужными методами и свойствами, одно из свойств будет ссылкой на инстанс Class2.
Class3.RefSubclass.RefSubSubclass.MethodFromClass1.
Lasciate ogni speranza, voi ch'entrate.

grim
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 25.07.2005 (Пн) 9:33

Re: ООП в VBA

Сообщение grim » 16.04.2009 (Чт) 16:07

А можно более подробный экзампл, а то не очень понятно
и по "refsubclass" в гуглу ничего вразумительного не нашлось

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ООП в VBA

Сообщение alibek » 16.04.2009 (Чт) 16:26

Класс Cars
Код: Выделить всё
Option Explicit

Private colCars As Collection

Public Property Get Item(Key) As Car
  Dim objCar As Car
  On Error Resume Next
  Set objCar = colCars.Item(Key)
  If Err.Number <> 0 Then Set objCar = Nothing
  On Error GoTo 0
  Set Item = objCar
End Property


Класс Car
Код: Выделить всё
Option Explicit

Public Name
Public Parts As Parts

Private Sub Class_Initialize()
Set Parts = New Parts
Parts.Reload Me.Name
End Sub

Private Sub Class_Terminate()
Set Parts = Nothing
End Sub


Класс Parts
Код: Выделить всё
Option Explicit

Private colParts As Collection

Public Property Get Item(Key) As Part
  Dim objPart As Part
  On Error Resume Next
  Set objPart = colParts.Item(Key)
  If Err.Number <> 0 Then Set objPart = Nothing
  On Error GoTo 0
  Set Item = objPart
End Property


Класс Part
Код: Выделить всё
Option Explicit

Public Name
Public Value



Использование:
Код: Выделить всё
Dim Cars As Cars
Set Cars = New Cars
Cars.Load
...
MsgBox Cars.Item("Mazda").Parts.Item("Engine").Value


В VBA флаги процедурам ты задать не можешь, поэтому без Item не получится.
Lasciate ogni speranza, voi ch'entrate.

grim
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 25.07.2005 (Пн) 9:33

Re: ООП в VBA

Сообщение grim » 22.04.2009 (Ср) 14:38

Спасибо попробую!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 15

    TopList