Pozdrawam
JK.
Ps. Ktos tu kiedys podawal linki do dobrych stron o vba dla excela.Nie
chodzi mi o zupelne podstawy. Z polskich znam tylko
http://www.vba.matrix.pl/ ale tam akurat czesc dotyczaca wlasnych obiektow
jest niedostepna.
Do tego możesz wykorzystać moduł klasy (menu Insert -> Class Module).
Właściwości tworzysz przy pomocy słowa kluczowego Property, a metody to
zwykłe Sub lub Function (oczywiście typu Public). Jeśli chcesz, to możesz
zastosować obrębie modułu obiekt globalny, np. Arkusz. musisz go tylko
przypisać do zmiennej globalnej, np. w zdarzeniu Class_Initialize. Możesz
także korzystać z jego zdarzeń, gdy deklaracje zmiennej obiektowej
poprzedzisz słowem kluczym WithEvents. możesz także tworzyć własne zdarzenia
(słowo kluczowe Events, RaiseEvent)
> Domyslam sie ze nie ma w vb rzeczy takich jak dziedziczenie, ale to akurat
> mozna przezyc. Czy jesli mozna robic wlasne obiekty da sie je wkladac do
> kolekcji?
Bez problemu. Możesz wykorzystać obiekt typu Collection.
W VB6 (Office 2000 lub wyższy) możesz jedynie "dziedziczyć" interfejs
uzywając słowa kluczowe Implements.
> Ps. Ktos tu kiedys podawal linki do dobrych stron o vba dla excela.Nie
> chodzi mi o zupelne podstawy. Z polskich znam tylko
> http://www.vba.matrix.pl/ ale tam akurat czesc dotyczaca wlasnych obiektow
> jest niedostepna.
Szczegółów szukaj raczej na stronach poświęconych Visual Basicowi, gdyż
obsługa obiektów w VBA jest dokładnie taka sama jak w VB.
Godnym polecenia źródłem wiedzy na ten temat może być także książka "Visual
Basic. Programowanie obiektowe" wydawnictwa Translator
--
Pozdrowienia
px...@poczta.onet.pl
Oczywiście możesz "dziedziczyć" implementację obiektu,a nie interfejs.
Sorry za wprowadzenei w błąd.
--
Pozdrowienia
px...@poczta.onet.pl
Chyba się nie da tak dosłownie, nie jestem w tym zbyt dobrze zorientowany.
Ale możesz na przykład tworzyć obiekty przy pomocy kolekcji i tam możesz w
metodzie Add napisać jakiś konstruktor.
--
Pozdrowienia
px...@poczta.onet.pl
Hehe. Niekoniecznie. Pamiętaj że kolekcja to też obiekt i może on tworzyć
inne obiekty.
Przykładem niech będzie metoda Add kolekcji Workbooks.
Poniżej mały przykład. Nie wiem czy dobrze zaimplementowałem klasę Kolekcja,
bo wiem że kiedyś miałem z tym problemy (bodajże z indeksacją elementów), a
nie mam pod ręką ksiązki o której wspominałem, ale to co poniżej oddaje sens
o co mi chodziło.
------------------
'Klasa Obiekt
Option Explicit
Dim mWysokość As Long
Public Property Let Wysokość(rozmiar As Long)
mWysokość = rozmiar
End Property
Public Property Get Wysokość() As Long
Wysokość = mWysokość
End Property
------------------
'Klasa Kolekcja
Option Explicit
Dim mCollection As Collection
Dim mIlość As Long
Private Sub Class_Initialize()
Set mCollection = New Collection
End Sub
Private Sub Class_Terminate()
Set mCollection = Nothing
End Sub
Public Function DodajNowy() As Obiekt
Dim nowyObiekt As New Obiekt
nowyObiekt.Wysokość = 10
mCollection.Add nowyObiekt
mIlość = mIlość + 1
Set DodajNowy = nowyObiekt
End Function
Public Function DodajNowy2(rozmiar As Long) As Obiekt
Dim nowyObiekt As New Obiekt
nowyObiekt.Wysokość = rozmiar
mCollection.Add nowyObiekt
mIlość = mIlość + 1
Set DodajNowy = nowyObiekt
End Function
---------------
'przykład uzycia tych obiektów
Sub Jeden()
Dim a As New Kolekcja
Dim b As Obiekt
Set b = a.DodajNowy
b.Wysokość = 12
MsgBox b.Wysokość
End Sub
---------------
W klasie Kolekcja masz trzy przykłady konstruktorów i dwa przykłady
dekonstruktorów:
- w oparciu o zdarzenie Initialize i Terminate - tak możesz tworzyć tylko
konstruktory domyślne.
- w oparciu o metody kolekcji: DodajNowy (konstruktor domyślny) i DodajNowy2
Oczywiście ten konstruktor w oparciu o kolekcję nie będzie działał w
przypadku gdy będziesz używał .... New Obiekt, ale AFAIR da się to jakoś
obejść, ale nie pamiętam dokładnie jak.
--
Pozdrowienia
px...@poczta.onet.pl
Kuba K.