Excel VBA-Userform (12 Public vs Private: Sub, Function, Module, Promenljive)
📝 U ovom videu radimo sa Public i Private! Ovo ćemo primeniti na sub, function, module i promenljivima. Radicemo sa dva primera.
Subprocedure (Sub)
Subprocedure, ili komandni makroi, su najčešći tip procedura i one obično sadrže komande koje predstavljaju ekvivalent opcijama menija i drugim programskim komandama. Važna osobina subprocedura je da, kao i obične programske komande, imaju uticaj na svoje okruženje. Na primer, subprocedure mogu menjati format ćelije. Subprocedure ne vraćaju nikakvu vrednost!
Format subprocedura je sledeći:
Sub ImeProcedure(argument1, argument2, ...)
VBA naredbe
End Sub
Subprocedure počinju rečju Sub i završavaju se sa End Sub. Ulazni argumenti subprocedure su razdvojeni zarezima. Prilikom davanja imena subproceduri moramo ispoštovati par jednostavnih konvencija. Naime, ime procedure ne može biti duže od 255 karaktera, prvi karakter mora biti slovo, a ostali karakteri mogu biti slova, cifre ili karakter podvlaka (_). U imenu procedure nisu dozvoljeni spejsovi i tačke! Na primer,
Dozvoljena imena subprocedura su: PromeniBoju, Para5, Debeli_lad
Dok su nedozvoljena imena: 5Para, Mirko&Slavko, Promeni boju
Što se tiče imena procedura, VBA nije case-sensitive, tj. ne pravi razliku između velikih i malih slova. Tako se imena PromeniBoju, Promeniboju i PROMENIBOJU odnose na istu proceduru.
Ispred ključne reči Sub u zaglavlju subprocedure se mogu naći i dodatne ključne reči koje određuju opseg subprocedure, tj. njenu vidljivost u odnosu na druge module u projektu. Tako se ispred Sub mogu naći reči Private ili Public.
Private označava da je procedura dostupna samo procedurama iz istog modula, dok Public označava da je procedura vidljiva svim procedurama iz svih ostalih modula projekta.
Nezavisno od Private i Public, ispred Sub se može naći i ključna reč Static koja označava da se promenljive u proceduri čuvaju i nakon završetka njenog izvršenja. Izvršavanje subprocedure se može forsirano prekinuti korišćenjem instrukcije Exit Sub koja se može naći bilo gde u subproceduri.
Funkcije (Function)
Drugi često korišćeni tip procedura su korisnički definisane funkcije, koje rade slično kao i ugrađene Excel-ove funkcije (na primer, SUM ili PRODUCT). Osnovna karakteristika im je da primaju argumente, odrade određenu operaciju sa njima i vrate rezultat. Iako mogu uticati na izgled okruženja, dobro definisana funkcija ne bi trebalo da utiče na svoje okruženje.
Sintaksa korisničkih funkcija je sledeća:
Function ImeFunkcije (argument1, argument2, ...) as Tip
VBA naredbe
ImeFunkcije = VracenaVrednost
End Function
Funkcije se definišu u okviru modula.
Sintaksa funkcija je vrlo slična subprocedurama. Pravila za imenovanje funkcija su ista kao i zasubprocedure.
Osobenost ovih funkcija je da ime funkcije predstavlja izlaznu promenljivu. Ovo je ilustrovano linijom ImeFunkcije = VracenaVrednost. Tip izlazne promenljive se opciono može navesti u zaglavlju funkcije, nakon zagrade sa listom argumenata. O tipovima VBA promenljivih će biti reči kasnije.
Ispred ključne reči Function u zaglavlju funkcije se mogu naći reči Private ili Public.
Private označava da je funkcija dostupna samo procedurama iz istog modula, dok Public označava da je funkcija dostupna svim procedurama iz svih modula svih aktivnih Excel-ovih projekata.
Ispred Function se može naći i ključna reč Static koja označava da se promenljive deklarisane u funkciji čuvaju između poziva funkcija.
Slično kao kod subprocedura, izvršavanje funkcije se može prekinuti korišćenjem instrukcije Exit Function. U tom slučaju je potrebno voditi računa da je imenu funkcije, kao izlaznoj promenljivoj, dodeljena vrednost pre instrukcije Exit Function.
Lekcija 1: sub i function, zbir dva broja.
Userform (Lekcija1):
Private Sub btn_test_Click()
btn_test.Caption = "Zbir dva broja"
btn_test.BackColor = vbBlue
btn_test.ForeColor = vbWhite
Call zbir
End Sub
Sub zbir()
MsgBox "Zbir je: " & ZbirDvaBroja(25, 5)
End Sub
Public Function ZbirDvaBroja(prviBroj As Integer, drugiBroj As Integer) As Integer
ZbirDvaBroja = prviBroj + drugiBroj
End Function
Lekcija 2: public i private userform i module, Login forma
Userform (Lekcija2):
Private Sub btn_test_Click()
btn_test.Caption = "LOG IN"
btn_test.BackColor = vbBlack
btn_test.ForeColor = vbWhite
If (duzinaSlova(tb_user.Text) < 3) Then GoTo Greska
Call proveriKorisnika
If (isUserOK = True And isPassOK = True) Then
MsgBox "Uspesno ste se prijavili!"
Else
MsgBox "Greska! Proverite username i password"
End If
Greska: Exit Sub
End Sub
Module (User_Pass_Module):
Public isUserOK As Boolean
Public isPassOK As Boolean
Public Sub proveriKorisnika()
isUserOK = False
isPassOK = False
Call checkUser
Call checkPass
End Sub
Private Sub checkUser()
If (Lekcija2.tb_user.Text <> "") Then
isUserOK = True
End If
End Sub
Private Sub checkPass()
If (Lekcija2.tb_pass.Text <> "") Then
isPassOK = True
End If
End Sub
Public Function duzinaSlova(myUser As String) As Integer
duzinaSlova = Len(myUser)
End Function
Test: public i private userform i userform , zbir dva broja.
Private Sub UserForm_Click()
MsgBox "Zbir je: " & Lekcija1.ZbirDvaBroja(100, 5)
End Sub
Excel dokument iz ovog videa možete preuzeti na linku ispod.