Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

wlasne obiekty w VBA (Excel)

4 views
Skip to first unread message

Kubassa

unread,
Oct 25, 2003, 12:58:59 PM10/25/03
to
Czy mozna jakos zrobic wlasny obiekt z wlasnymi metodami? Chial bym sobie
opakowac skoroszyt w swoj obiekt. Atrybutami obiektu byl by skoroszyt i
pewnie kilka prostych zmiennych. Chcial bym oczywiscie zrobic tez swoje
metody (np do wyszukiwania w tym arkuszu, ale troche inaczej dzialajace niz
te dostarczone z excelem).
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?

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.

pxd74

unread,
Oct 27, 2003, 11:23:14 AM10/27/03
to
Użytkownik "Kubassa" <qba...@WYTNIJTOacn.waw.pl> napisał w wiadomości
news:bnea4n$ap2$1...@foka.aster.pl...

> Czy mozna jakos zrobic wlasny obiekt z wlasnymi metodami? Chial bym sobie
> opakowac skoroszyt w swoj obiekt. Atrybutami obiektu byl by skoroszyt i
> pewnie kilka prostych zmiennych. Chcial bym oczywiscie zrobic tez swoje
> metody (np do wyszukiwania w tym arkuszu, ale troche inaczej dzialajace
> niz te dostarczone z excelem).

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

Kubassa

unread,
Oct 27, 2003, 6:55:45 PM10/27/03
to
Dzieki serdeczne.
PS. A czy mozna przy inicjalizacji obiektu (new) przekazywac parametry
(konstruktor) ?

pxd74

unread,
Oct 28, 2003, 1:13:55 AM10/28/03
to
> W VB6 (Office 2000 lub wyższy) możesz jedynie "dziedziczyć" interfejs
> uzywając słowa kluczowe Implements.

Oczywiście możesz "dziedziczyć" implementację obiektu,a nie interfejs.
Sorry za wprowadzenei w błąd.


--
Pozdrowienia
px...@poczta.onet.pl

pxd74

unread,
Oct 28, 2003, 1:16:50 AM10/28/03
to
> PS. A czy mozna przy inicjalizacji obiektu (new) przekazywac parametry
> (konstruktor) ?

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

Kubassa

unread,
Oct 28, 2003, 4:54:51 PM10/28/03
to
> Ale możesz na przykład tworzyć obiekty przy pomocy kolekcji i tam możesz w
> metodzie Add napisać jakiś konstruktor.
Hm.......nie do konca rozumiem....pierw musze cos stworzyc zeby dodac do
kolekcji?


pxd74

unread,
Oct 29, 2003, 1:41:52 AM10/29/03
to
> Hm.......nie do konca rozumiem....pierw musze cos stworzyc zeby dodac do
> kolekcji?

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

Kubassa

unread,
Oct 29, 2003, 4:02:18 PM10/29/03
to
Dzieki, jest to jakis pomysl z ta metoda dodaj z parametrem....
Pozdrawiam

Kuba K.


0 new messages