Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako napraviti Custom Event?

[es] :: Office :: Excel :: Kako napraviti Custom Event?

[ Pregleda: 1746 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Brodoplovac
Beograd

Član broj: 171299
Poruke: 838
*.adsl.verat.net.



+166 Profil

icon Kako napraviti Custom Event?21.06.2011. u 21:37 - pre 156 meseci
Da li neko ima ili može da napiše jednostavan primer kako napraviti Custom Event?
Želeo bih da napravim Custom Event da kada neko selektuje ćeliju A1 (Sheet1), da se u ćeliji A2 (Sheet1) pojavi reč "MMM".

Ja imam jedan primer u knjizi i ovde sam pronašao još jedan primer:
http://msdn.microsoft.com/en-us/library/gg264327.aspx
i probao sam sve kombinacije ali ne mogu da rešim zadatak.

Ovo sam stavio u class modul koji se zove NazivKlase:
Code:
Public Event CelijaJeOdabrana()

Sub subEventa(instancaKlase As Range)
Set instancaKlase = Worksheets("Sheet1").Range("A1")
If instancaKlase.Selection = True Then
    RaiseEvent CelijaJeOdabrana
End If
End Sub


Ovo sam stavio u Sheet1 modul:
Code:
Private WithEvents instancaKlase As NazivKlase

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set instancaKlase = New NazivKlase
End Sub

Private Sub instancaKlase_CelijaJeOdabrana()
    Worksheets("Sheet1").Range("A2").Value = "MMM"
End Sub




 
Odgovor na temu

neptuncokg
Predrag M
racunovodja
Kragujevac

Član broj: 230353
Poruke: 326
*.dynamic.isp.telekom.rs.



+9 Profil

icon Re: Kako napraviti Custom Event?21.06.2011. u 23:16 - pre 156 meseci
Problem je sledeci: "Želeo bih da napravim Custom Event da kada neko selektuje ćeliju A1 (Sheet1), da se u ćeliji A2 (Sheet1) pojavi reč "MMM".
Ako sam ja to dobro razumeo, treba da, kada se "klikne" - selektuje neka celija, celija ispod nje dobije vrednost "MMM". Za tako nesto nije potrebno mnogo programiranja, u smislu klasnih modula, silnih procedura...Dovoljno je u dogadjaju "Worksheet_SelectionChange(ByVal Target As Range)" staviti:

Dim rng As Range
Set rng = Target.Offset(1, 0)
rng.Value = "MMM"

I to je to (ponavljam, ako sam dobro razumeo). Evo i primera u prilogu. Pozdrav


Prikačeni fajlovi
 
Odgovor na temu

Brodoplovac
Beograd

Član broj: 171299
Poruke: 838
*.adsl.verat.net.



+166 Profil

icon Re: Kako napraviti Custom Event?22.06.2011. u 06:30 - pre 156 meseci
Neptun, izvini što nisam jasno naglasio šta želim. Ovo što radim je edukativnog karaktera. Meni treba samo jednostavan primer kreiranja Custom Event-a koji bih mogao lako da reprodukujem i koji bih mogao da razumem. Primer može da kreira "MMM" reč u A2 ćeliji, a može i neki totalno drugačiji primer. Važno je samo da se pritom kreira Custom Event.

 
Odgovor na temu

3okc
Χoᴘᴦoѡ

Moderator
Član broj: 811
Poruke: 1319

Jabber: 3okc@elitesecurity.org


+116 Profil

icon Re: Kako napraviti Custom Event?23.06.2011. u 21:31 - pre 156 meseci
msdn: Creating Custom Events
VB & VBA in a Nutshell: The Language, By Paul Lomax Chapter 4: Implementing Custom Events
Have you found helpful examples, solutions or ideas-in-work, please consider the
following:
• Citation of *actual page* you are going to using is welcome.
• Have you saw "Value Added" examples you are going to incorporate to your
profitable blog, daily job or any money making venture: How about online donation?
↗Ana & Vlade Divac Foundation
Hvala!
 
Odgovor na temu

Brodoplovac
Beograd

Član broj: 171299
Poruke: 838
*.adsl.verat.net.



+166 Profil

icon Re: Kako napraviti Custom Event?26.06.2011. u 12:00 - pre 156 meseci
++ Većina tutorijala na netu objašnjava kreiranje Custom Eventsa koji su skroz beskorisni. Oni su beskorisni jer rade isto što i custom methodi napravljeni za custom classu. Evo jednog takvog primera. Ovaj primer radi sledeće:
Prvo kreiramo klasu (1).
Unutar te klase definišemo Event (2).
Unutar eventa definišemo method kojim se taj Event poziva (3).
U nekom class modulu ("Sheet1" modul na primer) deklarišemo objekat klase SourceClass i kažemo da taj objekat reaguje na Evente (4).
Sada napišemo šta se dešava kada se desi Event (5).
Da bi event radio moramo setovati deklarisani objekat kao deo SourceClass klase i moramo pozvati njegov method (6).
Evo šta se dešava. Prvo pokrenemo makro (6). On setuje objekat i pozove njegov event. Taj event odradi svoj posao (5), tj. upiše trenutno vreme u "Immediate window". Pogledati atačment: Attachment: Custom Event 1.xlsm.


'ovo ide u class modul koji se zove SourceClass (1).
Public Event SomeEvent() '(2)

Public Sub raiseEvents() '(3)
RaiseEvent SomeEvent
End Sub

'ovo sve ispod ide u "Sheet1" modul.
Dim WithEvents aNObject As SourceClass '(4)

Private Sub aNObject_SomeEvent() '(5)
Debug.Print "Trenutno vreme je: " & Now()
End Sub

Sub SourceSinkTest() '(6)
Set aNObject = New SourceClass
aNObject.raiseEvents
End Sub


++ Ovde ću pokazati zašto gornji primer ne valja. Evo kako ista stvar može da se obavi mnogo lakše. Koraci su sledeći:
Napravimo novu klasu i novi method unutar nje (1).
U VBA modulu deklarišemo objekat kao element nove klase (2).
Napravimo proceduru koja koristi dati method (3).
Kao što vidimo kada pokrenemo proceduru (3) izvršiće se method (1). To je dosta slično kao prethodni primer i custom method u ovako jednostavnom slučaju može potpuno da zameni custom event. Pogledati atačment: Attachment: Custom Event 2.xlsm.


'ovo ide u class Modul SourceClass
Sub method() '(1)
Debug.Print "Trenutno vreme je: " & Now()
End Sub

'ovo ide u Module1
Dim objekat As New SourceClass '(2)

Sub PrimeniMethod() '(3)
objekat.method
End Sub


++ Ovo je pravi primer kako koristiti Custom Event. Koraci su sledeći:
Prvo napravimo klasu i definišemo event za tu klasu (1).
Sada definišemo kada se Event pokreće tj. method za tu klasu koji poziva Event. Ovo je najvažniji korak. Ovde treba da napravimo petlju, stavimo DoEvents komandu i onda tek definišemo pod kojim uslovima se pokreće Event.
Sada definišemo objekat nove klase (3).
Sada iskoristimo event otvaranja workbooka da bismo setovali objekat u klasu i da bi taj objekat pokrenuo svojim methodom proceduru koja pokreće osluškivanje eventa (4 i 2).
Sada napišemo šta se dešava kada se event desi (5).
Kada se Workbook otvori (4), uključi se osluškivanje eventa (2). Pokreće se petlja u (2) koja proverava da li su ispunjeni uslovi za event, ako jesu izlazimo iz petlje zbog komande "DoEvents" i obavljamo event (5). Nakon ovoga petlja nastavlja da se vrti i da čeka kada će se ponovo uspostaviti uslovi za Event. Konstantan rad ove petlje neće smetati drugim makroima jer će oni uvek imati prednost zbog komande DoEvents.
- Inače ovaj makro radi tako što kada kliknemo na ćeliju koja sadrži broj "3" tada se u ćeliji "A1" upiše proizvoljno ASCII slovo i ćelija A1 se selektuje. Ako kliknemo na ćeliju koja ne sadrži broj 3 ništa se neće desiti. Pogledati atačment: Attachment: Custom Event.xlsm.


'ovo ide u class Modul SourceClass
Public Event CelijaJeTrojka() '(1)

Sub CelijaJeTrojka() '(2)
Do
DoEvents
If ActiveCell.Value = 3 Then
RaiseEvent CelijaJeTrojka
End If
Loop
End Sub

'ovo ide u This Workbook modul.
Private WithEvents clsObjekat As clsSourceKlasa '(3)

Private Sub Workbook_Open() '(4)
Set clsObjekat = New clsSourceKlasa
clsObjekat.CelijaJeTrojka
End Sub

Private Sub clsObjekat_CelijaJeTrojka() '(5)
Worksheets("Sheet1").Range("A1").Value = Chr(Int(65 + Rnd() * 25))
Worksheets("Sheet1").Range("A1").Select
End Sub


Prikačeni fajlovi
 
Odgovor na temu

[es] :: Office :: Excel :: Kako napraviti Custom Event?

[ Pregleda: 1746 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.