34
Programiranje kro aplikacije Korisniĉke forme Upravljanje greška ma

Programiranje kroz aplikacije 6

Embed Size (px)

Citation preview

Programiranje kroz aplikacijeKorisnike forme Upravljanje grekama

Message box

VBA funkcija MsgBox prikazuje poruku korisniku i od korisnika se moe dobiti povratna informaciju. Sintaksa je: Odgovor = MsgBox(prompt [,buttons] [,title] [,helpfile,context])

prompt tekst koji se prikazuje u box-u; buttons numeriki izraz koji odreuje koja dugmad i ikonice e biti prikazane; title naslov prozora message box-a; helpFile, context odreuju help fajl i stavku help-a. Zadaju se u paru.

Argument buttons odreuje dugmad i ikonice koja e se nai na message box-u, kao i koje dugme je podrazumevano. Konstante koje odreuju dugmad na message boksu su date u tabeli na sledeem slajdu.

Definisanje dugmadi na message box-uKonstanta vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 Vrednost 0 1 2 3 4 5 16 32 48 64 0 256 512 768 Opis Samo OK dugme. Dugmad OK i Cancel. Dugmad Abort, Retry i Ignore. Dugmad Yes, No i Cancel. Dugmad Yes i No. Dugmad Retry i Cancel. Ikonica Critical Message. Ikonica Warning Query. Ikonica Warning Message. Ikonica Information Message. Prvo dugme je podrazumevano. Drugo dugme je podrazumevano. Tree dugme je podrazumevano. etvrto dugme je podrazumevano.

Ove konstante su deo specifikacije VBA i mogu se koristiti bilo gde u kodu umesto odgovarajuih numerikih vrednosti.

Primer message box-a

Kombinovanjem konstanti za dugmad, ikonice i podrazumevanu dugmad ostvarujemo eljeni izgled prozora. Na primer, pozivom MsgBox("elite li da zatvorite fajl?", _ vbYesNoCancel + vbQuestion + vbDefaultButton2, _ "Zatvaranje fajla") se pojavljuje prozor prikazan na slici ispod.

Vraene vrednosti message box-a

Odgovor korisnika na message box se dobija preko vrednosti koju vraa funkcija MsgBox. U zavisnosti od pritisnutog dugmeta, funkcija vraa jednu od celobrojnih vrednosti datih u tabeli ispod.Konstanta Vrednost Pritisnuto dugme vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore vbYes 6 Yes vbNo 7 No

Input box

Input box predstavlja jednostavnu korisniku formu koja korisniku omoguava da unese podatak. Vraeni podatak je tipa string.

Input box se aktivira pomou VBA funkcije InputBox, ija je sintaksa: Podatak = InputBox(prompt, title, default, x, y, helpfile, context)

prompt tekst koji se prikazuje u box-u; title naslov prozora input box-a;

default podrazumevana vrednost prikazana u input box-u;x, y ekranske koordinate gornjeg levog ugla prozora box-a; helpFile, context odreuju help fajl i stavku help-a. Zadaju se u paru.

Jedino je prompt obavezan argument. Maksimalna duina prompt-a je priblino 1024 karaktera, zavisno od irine korienih karaktera. U sluaju kad je uneeni podatak broj, InputBox treba kombinovati sa funkcijom Val: Broj = Val(InputBox("Uneti broj: "))

Primer input box-a

Poziv Ime = InputBox("Uneti ime: ", "Unos imena studenta") e dati input box prikazan na slici ispod. Uneeno ime e biti dodeljeno promenljivoj Ime nakon klika na dugme OK.

Korisniki kreirane forme

Korisnika forma, UserForm, se u projekt unosi sa Insert / UserForm. Nakon toga se na formu dodaju kontrole, podese se njihove osobine i napiu procedure za upravljanje dogaajima vezanim za te kontrole. Ove procedure se nalaze u kodnom prozoru same forme.Kontrole se na formu dodaju koristei Toolbox, koji se aktivira opcijom View / Toolbox. Toolbox je dat na slici ispod.

Kontrole formiLabela (Label) Labela slui za prikaz teksta na formi. Tekst labele se dobija ili menja pomou osobine Caption. Tekst boks (TextBox) Ova kontrola dozvoljava korisniku da unese tekst. Tekst kontrole se dobija ili menja pomou osobine Text. Kombo boks (ComboBox) Ova kontrola daje padajui meni sa kojeg biramo jednu opciju ili nam doputa da sami unesemo podatak. Korisne metode ove kontrole su:

AddItem (dodavanje nove stavke menija) RemoveItem (brisanje postojee stavke menija) Clear (brisanje svih stavki menija). ListCount (vraa broj stavki u meniju kontrole) ListIndex (vraa broj trenutno odabrane stavke menija), List (pristupanje pojedinim stavkama menija List(0), List(1) ...).

Korisne osobine ove kontrole su:

Kontrole formi (nastavak)

List boks (ListBox) List boks daje listu stavki sa koje korisnik moe izabrati jednu ili vie stavki. Ova kontrola je vrlo slina kombo boksu, s tim to kombo daje padajui meni za odabir jedne stavke. Druga razlika je da kod kombo boksa korisnik moe uneti stavku koja se ne nalazi na listi. Nabrojane osobine i metode kombo boksa vae i za list boks. ek boks (CheckBox) ek boks se upotrebljava kada elimo da definiemo neki binaran izbor, npr. da ili ne, istinito ili neistinito, ukljueno ili iskljueno. Kontrola ima dve mogue vrednosti, True (kontrola ekirana) ili False (kontrola nije ekirana). Promena vrednosti ek boksa se vri pomou osobine Value. Opciono dugme (OptionButton) Opciona dugmad (radio dugmad) se koriste za odabir jedne od nekoliko opcija. Nalaze se u grupama od po minimum dva dugmeta. Kada se jedno dugme u grupi aktivira ostala se deaktiviraju. Pomou osobine Value se dobija ili menja stanje dugmeta.

Kontrole formi (nastavak)

Toggle dugme (ToggleButton) Slino kao ek boks i opciona dugmad, ovo dugme ima dva mogua stanja, ukljueno i iskljueno. Vrednost dugmeta je True (pritisnuto) ili False (nije pritisnuto). Pomou osobine Value se dobija ili menja stanje dugmeta.

Okvir (Frame) Okvir slui da obuhvati druge kontrole, bilo iz estetskih razloga, bilo zbog grupisanja kontrola na logian nain. Okvir se koristi za grupisanje opcionih dugmadi kada forma ima vie od jedne grupe ovih dugmadi. U jednom okviru, sva opciona dugmad su meusobno iskljuiva.Komandno dugme (CommandButton) Ovo dugme slui da izvri odreenu radnju koju programiramo u okviru dogaaja Click ovog dugmeta. Ova kontrola se najvie koristi i svaka forma koju kreiramo e imati bar jedno komandno dugme.

Tab strip (TabStrip) Ova kontrola slui za kreiranje formi sa vie tabova (stranica).

Kontrole formi (nastavak)

Multi page (MultiPage) Slino kao tab strip, multi page kontrola kreira forme sa vie stranica. Kliza (ScrollBar) Kod klizaa, odabir jedne od vrednosti iz odreenog opsega vrimo prevlaenjem klizaa. Minimalna, maksimalna i trenutna vrednost klizaa se dobijaju i menjaju pomou osobina Min, Max i Value. Osobine SmallChange i LargeChange definiu korak promene vrednosti klizaa.

Spin dugme (Spin Button) Spin dugme omoguava odabir vrednosti kontrole klikanjem jedne od dve strelice, pri emu jedna strelica poveava, a druga smanjuje vrednost.Image kontrola (Image control) Image kontrola se koristi za prikaz slike koja je u formi zasebnog fajla. RefEdit kontrola (RefEdit) RefEdit kontrola se koristi za odabir opsega u radnom listu.

Prikaz forme

Forma se prikazuje pomou metode Show objekta UserForm. Poev sa Office-om 2000, korisnike forme mogu biti nemodalne (eng. modeless), to znai da korisnik moe pristupiti radnoj svesci, ili aplikaciji, bez zatvaranja forme. Nemodalnost se postie sa UserForm.Show vbModeless

Podrazumevani nain prikaza korisnike forme je modalan.VBA poseduje i naredbu Load pomou koje se vri uitavanje forme u memoriju, na sledei nain: Load UserForm Ipak, ovako uitana forma nije vidljiva dok se ne pozove Show. Load se obino koristi kod sloenih formi koje se uitaju u memoriju pre upotrebe kako bi se skratilo vreme prikaza forme metodom Show.

Zatvaranje forme

Za zatvaranje forme se moe koristiti naredba Unload. Na primer, forma UserForm se moe zatvoriti na bilo koji od sledea dva naina: Unload UserForm Unload Me Me je kljuna re VBA pomou koje forma referencira samu sebe. Koristi se radi skraenja zapisa referenciranja forme i odnosi se na onu formu u kojoj se nalazi procedura koja sadri re Me. Korienje rei Me umesto imena forme eliminie potrebu menjanja kda prilikom promene imena forme.Forma se moe zatvoriti metodom Hide. Pozivom Hide, forma nestaje sa ekrana, ali ostaje u memoriji, tako da na kd i dalje moe pristupiti kontrolama. Hide se poziva na bilo koji od sledea dva naina: UserForm.Hide Me.Hide

Pozivanje forme sa palete alatki

Korisnike forme se mogu prikazati pomou odgovarajueg dugmeta sa palete alatki. Moemo kreirati sopstvenu paletu alatki i sa nje pozvati formu, ili koristiti neku od postojeih paleta. Za oba naina je zajedniko da se dodavanje dugmeta koje prikazuje formu najee vri pri otvaranju radne sveske, tj. u okviru procedure Workbook_Open. Prikaz forme predstavlja poziv procedure koja u sebi sadri naredbu UserForm.Show

Dodavanje dugmeta postojeoj paleti

Dugme koje se dodaje paleti alatki je VBA objekat tipa CommandBarButton. Deklaracija dugmeta i dodavanje istog paleti se vri na sledei nain: Dim Dugme As CommandBarButton Set Dugme = Application.CommandBars("Standard").Controls.Add( _ Type:=msoControlButton, Temporary:=True) Dodavanje kontrole se vri metodom Add kolekcije Controls. Argument Type odreuje tip kontrole, dok Temporary odreuje da li se kontrola automatski brie nakon zatvaranja aplikacije (True) ili ne (False). Podrazumevano je False.

Osobine dugmeta

Nakon dodavanja dugmeta paleti, definiemo mu osobine. Na primer: With Dugme .Style = msoButtonCaption .Caption = "Dugme" .OnAction = "Procedura" End With definie dugme samo sa tekstom (osobina Style), tekst koji e biti ispisan na dugmetu (osobina Caption), kao i proceduru koja se poziva pritiskom na dugme (osobina OnAction).Ako elimo da, umesto teksta, definiemo ikonicu koja e biti prikazana na dugmetu, imali bi konstrukciju slinu sledeoj: With Dugme Dozvoljena je i kombinacija .Style = msoButtonIcon teksta i ikonice, kada je stil .Picture = LoadPicture("C:\Slika.bmp") msoButtonIconAndCaption .OnAction = "Procedura" End With

Kreiranje nove palete alatki

Paleta koja se dodaje je VBA objekat tipa CommandBar. Dodavanje palete se vri metodom Add kolekcije CommandBars. Dim Paleta As CommandBar Set Paleta = Application.CommandBars.Add(Name:="NasaPaleta", _ Position:=msoBarTop, Temporary:=True) Paleta.Visible = True

Argument Name definie ime palete. Argument Position definie poziciju palete u odnosu na prozor aplikacije. Konstantom msoBarTop se paleta smeta na vrh prozora. Argument Temporary odreuje da li se paleta automatski brie nakon zatvaranja aplikacije (True) ili ne (False). Podrazumevano je False.Kreirana paleta podrazumevano nije vidljiva. Da bi je uinili vidljivom, potrebno je podesiti njenu osobinu Visible na True. Dodavanje dugmeta na paletu NasaPaleta se vri na ranije opisan nain, s tim to se paleta referencira sa CommandBars("NasaPaleta").

Primer 1

Napraviti formu koja ima jedan tekst boks i dva dugmeta (Izmeni i Izai. U tekst boks se unosi string i pritiskom na dugme Izmeni se menja ime prvog radnog lista uneenim stringom. Dugme Izai zatvara formu. Prikaz forme se vri desnim klikom mia na bilo koji radni list.

Primer 1 (nastavak)

U okviru modula forme imamo:Private Sub CommandIzmeni_Click() If Me.TextBoxIme.Text "" Then ThisWorkbook.Worksheets(1).Name = Me.TextBoxIme.Text Else MsgBox "Niste uneli ime lista" End If End Sub Private Sub CommandIzadji_Click() Unload Me End Sub

Primer 2

Napraviti formu koja ima grupu od 3 opciona dugmeta kojima se podeava boja elija selekcije na crvenu, zelenu ili plavu, jedan ek boks za postavljanje i uklanjanje okvira selekcije, kao i kliza kojim se menja veliina teksta selekcije od 7 pt do 17 pt sa korakom od 0.5 pt. Ako je, pri startovanju forme, veliina fonta selekcije van opsega 7-17 pt ili selekcija sadri vie od jedne veliine fonta, podesiti veliinu fonta selekcije na 9 pt. Forma sadri i dugme za zatvaranje forme. Prikaz forme se vri pomou dugmeta sa standardne palete alatki.

Primer 2 (nastavak)

U okviru modula forme imamo:Private Sub CheckBoxOkvir_Click() If Me.CheckBoxOkvir.Value = True Then Selection.Borders.LineStyle = xlContinuous Selection.Borders.Weight = xlThick Else Selection.Borders.LineStyle = xlNone End If End Sub Private Sub CommandIzadji_Click() Unload Me End Sub

Private Sub ScrollBarVelicinaFonta_Change() Selection.Font.Size = Me.ScrollBarVelicinaFonta.Value / 2 Me.LabelVelicinaFonta.Caption = "Veliina fonta je " & _ Selection.Font.Size & " pt" End Sub

Primer 2 (nastavak)

U okviru modula forme dalje imamo:Private Sub OptionButtonCrvena_Click() If Me.OptionButtonCrvena.Value Then Selection.Interior.Color = RGB(255, 0, 0) End If End Sub Private Sub OptionButtonZelena_Click() If Me.OptionButtonZelena.Value Then Selection.Interior.Color = RGB(0, 255, 0) End If End Sub Private Sub OptionButtonPlava_Click() If Me.OptionButtonPlava.Value Then Selection.Interior.Color = RGB(0, 0, 255) End If End Sub

Primer 2 (nastavak)

U okviru procedure Workbook_Open imamo:Private Sub Workbook_Open() Dim Dugme As CommandBarButton Set Dugme = Application.CommandBars("Standard").Controls.Add( _ Type:=msoControlButton, Temporary:=True) With Dugme .Style = msoButtonCaption .Caption = "Selekcija" .OnAction = "RadSaSelekcijom" End With End Sub

Primer 2 (nastavak)

U okviru standardnog kodnog modula imamo:Sub RadSaSelekcijom() Dim VF As Variant VF = Selection.Font.Size FormSelekcija.Show modeless If VF < 7 Or VF > 17 Or IsNull(VF) Then Selection.Font.Size = 9 FormSelekcija.ScrollBarVelicinaFonta = 18 FormSelekcija.LabelVelicinaFonta = "Veliina fonta je 9 pt" Else FormSelekcija.ScrollBarVelicinaFonta = 2 * VF FormSelekcija.LabelVelicinaFonta = "Veliina fonta je " & _ VF & " pt" End If End Sub

Primer 3

Napraviti formu koja ima kombo boks i etiri dugmeta sa natpisima: Upii, Brii sve, Brii zadnji i Izai. Pritiskom na dugme Upii, imena radnih listova se unose u kombo boks (po principu jedno imejedna stavka). Dugme Brii sve brie sve stavke kombo boksa, dugme Brii zadnji brie samo zadnju stavku kombo boksa i dugme Izai zatvara formu. Prikaz forme se vri pomou dugmeta sa novokreirane palete alatki.

Primer 3 (nastavak)

U okviru modula forme imamo:Private Sub CommandBrisiSve_Click() Me.ComboBoxImena.Clear End Sub Private Sub CommandBrisiZadnji_Click() If Me.ComboBoxImena.ListCount > 0 Then Me.ComboBoxImena.RemoveItem Me.ComboBoxImena.ListCount - 1 End If End Sub Private Sub CommandIzadji_Click() Unload Me End Sub Private Sub CommandUpisi_Click() Dim I As Integer For I = 1 To ThisWorkbook.Worksheets.Count Me.ComboBoxImena.AddItem ThisWorkbook.Worksheets(I).Name, I-1 Next End Sub

Primer 3 (nastavak)

U okviru procedure Workbook_Open imamo:Private Sub Workbook_Open() Dim Paleta As CommandBar, Dugme As CommandBarButton Set Paleta = Application.CommandBars.Add( _ Name:="Paleta", Position:=msoBarTop, temporary:=True) Paleta.Visible = True Set Dugme = Application.CommandBars("Paleta").Controls.Add( _ Type:=msoControlButton, temporary:=True) With Dugme .Style = msoIcon .Picture = LoadPicture("C:\VBA.gif") .Width = 30 .OnAction = "ImenaListova" End With End Sub

Upravljanje grekama

Greke se dele na sintaksne greke (greke u pisanju kda) i greke prilikom izvravanja (eng. run-time errors). Od interesa za nas su greke prilikom izvravanja.

Greke prilikom izvravanja uzrokuju prekid rada procedure uz pojavljivanje dijalog prozora koji prikazuje broj greke i njen opis. Na primer, ako se u proceduri nae A=B/0 pojavie se prozor greke deljenja sa nulom.Dobro napisana procedura treba da vodi rauna o pojavi greaka prilikom izvravanja, tj. treba da ih hvata i obrauje. Obrada greaka podrazumeva preduzimanje koraka kako bi se izvravanje procedure neometano nastavilo.

Naredba On Error

Naredba On Error omoguava hvatanje (detekciju) greaka i koristi se u dva osnovna oblika: On Error GoTo linija On Error Resume Next U prvom obliku, linija predstavlja labelu ili broj programske linije na koju e skoiti kontrola toka u sluaju greke,tj. prvu liniju kda za obradu greke. Ova linija se mora nai u istoj proceduri gde se nalazi naredba On Error, tj. kd za obradu greaka je ogranien na proceduru gde se greka pojavljuje. Naredba On Error se stavlja ispred dela koda gde se oekuje greka.

Primer Deljenje sa nulomSub ObradaDeljenjaSaNulom() Dim A As Integer, B As Integer On Error GoTo ObradiGresku B = 15 A=B/0 B=A^2 Exit Sub ObradiGresku: MsgBox "Greka broj " & Err.Number & ": Pokuaj deljenja sa _ nulom." End Sub

Svaka greka u VBA ima pridruen jedinstven kd (ceo broj). Kd greke se dobija pomou osobine Number objekta Err. Objekat Err sadri informacije o grekama prilikom izvravanja i njegova podrazumevana osobina je Number. Ukoliko nije dolo do greke, osobina Number ima vrednost 0.

On Error Resume Next

Kod On Error Resume Next, kontrola se prebacuje na prvu naredbu nakon naredbe koja je uzrokovala greku, tj. greka se ignorie. Jedan broj greaka se moe ignorisati. Na primer, ako elija ne sadri komentar, doi e do greke pri pokuaju itanja komentara. U nastavku je dat primer procedure koja ispisuje komentare svih elija datog opsega R.Sub Komentari() Dim R As Range, celija As Range, S As String Set R = Worksheets(1).Range("A1:C10") For Each celija In R.Cells On Error Resume Next MsgBox "elija " & celija.Address & vbCrLf & _ "Komentar: " & celija.Comment.Text On Error GoTo 0 Next End Sub

On Error GoTo 0

Naredba On Error GoTo 0 onemoguava hvatanje greaka u tekuoj proceduri. Iako se ovaj oblik moe protumaiti kao prvi oblik naredbe, gde 0 predstavlja broj linije kojom poinje kd za obradu greke, to nije sluaj. ak i da postoji linija procedure oznaena sa 0, ova naredba onemoguava hvatanje greaka.Ukoliko procedura ne sadri liniju On Error GoTo 0, onemoguavanje hvatanja greaka se postie automatski, izlaskom iz procedure. Hvatanje greaka je ponekad jednostavnije koristiti nego da sa mnotvom uslova predviamo svaku moguu greku koja se moe desiti u proceduri. Primer toga je provera da li postoji odreeni fajl. Umesto da proveravamo postojanje fajla pre njegovog otvaranja, moemo uhvatiti greku koja se pojavljuje u pokuaju da ga otvorimo.

Primer sa korienjem greaka

Napisati proceduru koja utvruje da li aktivna radna sveska sadri list Spisak i korisniku javlja odgovarajuu poruku.Sub TrazenjeLista() On Error Resume Next ActiveWorkbook.Worksheets("Spisak").Activate If Err.Number = 0 Then MsgBox "Postoji list Spisak" Else MsgBox "Ne postoji list Spisak" End If End Sub