Visual Basic App

14
Visual Basic for Applications za kemiˇ care Franka Miriam Br¨ uckler 1 Uvod VBA (Visual Basic for Applications) spada u tzv. kompajlirane (prevo dene) programske jezike: napisani kˆ od se prvo prevodi u izvrˇ sni oblik te se program izvodi pokretanjem izvrˇ snog programa. VBA se razvio iz starog programskog jezika Basic. VBA nije isto ˇ sto i Visual Basic (VB): VB je pogodniji za programere, a VBA za korisnike. VBA je najzgodniji za kreiranje tzv. macro- a za Excel. Mnoge funkcije tu su pred-programirane. Programiranje Excela pomo´ cu VBA naravno je puno lakˇ se ako dobro znate koristiti Excel. Glavna literatura bit ´ ce nam web-stranice http://www.excel-vba.com/excel- vba-contents.htm i http://www.vbtutor.net/vbtutor.html te knjiga Excel 2007 VBA Programming for Dummies. Radi lakˇ seg sporazumijevanja, prvo ´ cemo uvesti terminologiju. Excel Macros (makro-naredbe) su nizovi instrukcija koje am” izvodi Excel. Ono ˇ sto ´ cemo mi programirati su VBA procedure: nizovi instrukcija za koje ˇ zelimo da ih naˇ se raˇ cunalo izvede. To su u biti programi. Ono ˇ sto sami napiˇ semo zove se programski kod; on se piˇ se u VBE. Jedna ili viˇ se procedura grupiraju se u modul. Unutar programskog koda koristimo pet tipova komponenti: objekte, svo- jstva, metode, funkcije i naredbe (statements). Svi Excel projekti sastoje se od objekata. To je sama Excel aplikacija (Application), svaki Workbook, svaki Worksheet, rasponi (Ranges), grafikoni (Charts) idr. Objekti su organizirani hijerarhijski. Osnovni objekt je Appli- cation. Njegovi podobjekti su npr. Workbook, CommandBar, . . . Workbook za podobjekte ima npr. Worksheet, Chart, . . . Worksheet za podobjekte ima recimo Range, Name, . . . Oni su organizirani u kolekcije. Tako recimo kolek- cija Worksheets sadrˇ zi sve worksheets u nekom workbook. ˇ Zelimo li pristupiti nekom objektu i raditi s njim, puno ime mu se sastoji od niza imena objekata (kolekcija) koji se nalaze nad njim u toj strukturi (i 1

description

visual basic za excel

Transcript of Visual Basic App

Page 1: Visual Basic App

Visual Basic for Applications za kemicare

Franka Miriam Bruckler

1 Uvod

VBA (Visual Basic for Applications) spada u tzv. kompajlirane (prevodene)programske jezike: napisani kod se prvo prevodi u izvrsni oblik te se programizvodi pokretanjem izvrsnog programa. VBA se razvio iz starog programskogjezika Basic. VBA nije isto sto i Visual Basic (VB): VB je pogodniji zaprogramere, a VBA za korisnike. VBA je najzgodniji za kreiranje tzv. macro-a za Excel. Mnoge funkcije tu su pred-programirane. Programiranje Excelapomocu VBA naravno je puno lakse ako dobro znate koristiti Excel.

Glavna literatura bit ce nam web-stranice http://www.excel-vba.com/excel-vba-contents.htm i http://www.vbtutor.net/vbtutor.html te knjiga Excel 2007VBA Programming for Dummies.

Radi lakseg sporazumijevanja, prvo cemo uvesti terminologiju.Excel Macros (makro-naredbe) su nizovi instrukcija koje

”sam” izvodi

Excel. Ono sto cemo mi programirati su VBA procedure: nizovi instrukcijaza koje zelimo da ih nase racunalo izvede. To su u biti programi. Ono stosami napisemo zove se programski kod; on se pise u VBE. Jedna ili viseprocedura grupiraju se u modul.

Unutar programskog koda koristimo pet tipova komponenti: objekte, svo-jstva, metode, funkcije i naredbe (statements).

Svi Excel projekti sastoje se od objekata. To je sama Excel aplikacija(Application), svaki Workbook, svaki Worksheet, rasponi (Ranges), grafikoni(Charts) idr. Objekti su organizirani hijerarhijski. Osnovni objekt je Appli-cation. Njegovi podobjekti su npr. Workbook, CommandBar, . . . Workbookza podobjekte ima npr. Worksheet, Chart, . . . Worksheet za podobjekte imarecimo Range, Name, . . . Oni su organizirani u kolekcije. Tako recimo kolek-cija Worksheets sadrzi sve worksheets u nekom workbook.

Zelimo li pristupiti nekom objektu i raditi s njim, puno ime mu se sastojiod niza imena objekata (kolekcija) koji se nalaze nad njim u toj strukturi (i

1

Page 2: Visual Basic App

1 Uvod 2

njega samog) povezanih tockama. Tako recimo

Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("A2")

opisuje celiju A2 u Sheet1 u Book1.xls. Ipak, Application se podrazumi-jeva pa ga ne moramo pisati, a u pravilu ne treba pisati ni Workbooks (akone pise, podrazumijeva se rad s aktivnim workbook). Ukoliko izostavimo iWorksheet, radit ce se s aktivnim worksheet-om (oprez, mogucnost gresaka!).

Svaki objekt ima svoja svojstva (”kakav je objekt?”) koja mozemo pode-

siti putem VBA. Recimo, workheet moze biti vidljiv ili ne (Sheets(”SuchandSuch”).Visible= True), font moze biti bold (Selection.Font.Bold = True), celija moze sadrzavativrijednost ili formulu (Activecell.Value = 10, Activecell.Formula = ”=A1+B2”),itd. Metode su akcije s objektima; npr. mozemo htjeti zatvoriti aktivni work-book ili kopirati sadrzaj celije (ActiveWorkbook.Close, ActiveCell.Copy). Imetode, kao i svojstva, variraju za razlicite objekte. Pod funkcijama misli sena Excelove funkcije poput NOW(). Naredbe su vise-manje standardni tipoviinstrukcija: IF...THEN, DO...LOOP, FOR...NEXT, WITH...END WITH,EXIT FOR, EXIT DO, EXIT SUB

Da bi se pokrenula i izvela procedura, mora se desiti dogadaj (Event),recimo pritisak na gumb.

Workbook je Excel file (ime.xls). Objekt

ThisWorkbook

je workbook unutar kojeg pisemo proceduru. Ako napisemo

ThisWorkbook.Close

zatvorit cemo ga. Svaki Workbook sastoji se od najvise 256 worksheets,svaki sa 65536 redova i 256 stupaca (Excel 2007 dozvoljava 1000000 redovau worksheetu).

Npr.

Worksheets("printanje3").Range("a1:e13").PrintOut

ispisuje pravokutni dio celija od A1 do E13 iz worksheet-a ”printanje3”.Uz sve ovo postoje i UserForms i Controls. UserForms su posebne vrste

sheet-ova koje omogucuju korisniku da unese neke vrijednosti (parametre).

Page 3: Visual Basic App

2 Osnove programiranja: procedura, varijabla, pridruzivanje 3

Controls su komandni gumbi, labele, checkbox-ovi isl. elementi koje mozemorasporediti na userforms ili worksheets.

Slijedi prvi primjer procedure (makroa) s imenom proTest.

Sub proTest ()

Range("A2").Value= 2

ThisWorkbook.Save

ThisWorkbook.Close

Application.Quit

End Sub

Kad se ova procedura pokrene, u celiju A2 stavlja se iznos 2, sprema se izatvara datoteka te izlazi iz aplikacije.

Pokrenite program Excel na svom racunalu. Editor (VBE) za pisanjeprograma u Visual Basicu otvorit cete naredbom

Alt+F11

U osnovi, VBE se sastoji od tri podprozora: gore lijevo je Project Window,veliki prozor desno je Code Window, a dolje lijevo je Properties Window.Code Window se otvara klikom na desnu tipku misa na bilo koji elementProject Window-a (naredba Insert Module). Ako u Project Window od-aberemo neki objekt, onda se u Properties Window vide njegova svojstva strenutno pridruzenim vrijednostima.

2 Osnove programiranja: procedura, varijabla,pridruzivanje

Svaka procedura pocinje sa

Sub ime()

(u zagradama se mogu prenijeti varijable iz jedne procedure u drugu) izavrsava s

Page 4: Visual Basic App

2 Osnove programiranja: procedura, varijabla, pridruzivanje 4

EndSub

Taj kraj se automatski dodaje ako nakon prve linije nekoliko puta stis-nemo Enter. Procedure izvodimo pritiskom na F5. Ukoliko zelimo da se unekom trenutku prekine izvodenje procedure, odgovarajuca naredba je

Exit Sub

Svaka naredba u VBA mora biti u jednom redu. Ako se desi da moramokoristiti prijelom reda, onda se prije prijelaza u novi red treba staviti

_

(space i underscore).VBA ne razlikuje velika i mala slova tj.

”ime” i

”Ime” su jednaka imena

varijabli.Komentari zapocinju znakom ’ i protezu se na ostatak reda u kojem je to

znak:

’ Ovo je komentar.

Jedini slucaj kad se apostrof ’ ne interpretira kao pocetak komentara jeako se nalazi izmedu dvostrukih navodnika.

Osim procedura tipa Sub, VBA poznaje i one tipa Function. One primajuneke parametre i vracaju tocno jednu vrijednost (usporedite s matematickimpojmom funkcije).

2.1 Tipovi podataka

U svim programskih jezicima razlikuju se tipovi podataka, dakle strukturekoje se sastoje od skupova i dozvoljenih operacija s njihovim elementima.Razlikuju se prvenstveno po nacinu spremanja svojih elemenata u memorijuracunala. Neki od vaznijih tipova su Integer (cijeli brojevi spremani u po2 byte; raspon od -32768 do 32767), Long (cijeli brojevi spremani u po 4byte; raspon od 2,147,483,648 do 2,147,483,647), Single (decimalni brojevi

Page 5: Visual Basic App

2 Osnove programiranja: procedura, varijabla, pridruzivanje 5

spremani u po 4 byte; raspon -3.402823e38 do -1.401298e-45 i 1.401298e-45do 3.402823e38), Double (decimalni brojevi spremani u po 4 byte; raspon-1.79769313486232e308 do -4.94065645841247e-324 i 4.94065645841247e-324do 1.79769313486232e308), String (nizovi znakova; 1 byte po znaku), Date(datumi u po 8 byte; od 1/1/100 do 12/31/9999; moze se koristiti i za vri-jeme), . . . Defaultni tip varijable (ako nije deklarirana) je Variant; VB juautomatski prebacuje iz tipa u tip po potrebi (sto trosi dosta vremena imemorije).

2.2 Varijable

Varijabla u programskom jeziku je oznaka kojom pristupamo do nekog mjestau memoriji (imenovana memorijska lokacija). Imena varijabli su nizovi odnajvise 255 znakova. Prvi znak mora biti slovo, ostali mogu biti slova, brojke ineki specijalni znakovi (primjerice underscore). Ako se za ime varijable uzmerezervirana rijec, VBA compiler javlja gresku.

Vrijednost se varijabli pridruzuje operatorom pridruzivanja (=):

x = 1

iznos = 0.075

je_li = False

ime = "FMB"

datum = #3/14/2008#

vrijeme = #12:00:00#

Zelimo li se prisiliti na deklaraciju varijabli (sto je vrlo preporucljivo,npr. jer onda VBE otkrije greske u pisanju), prije prve procedure u modulustavljamo

Option Explicit

Varijable se deklariraju ovako:

Dim <ime_varijable> (As <tip>)

Page 6: Visual Basic App

2 Osnove programiranja: procedura, varijabla, pridruzivanje 6

Ukoliko se ne navede”As ¡tip¿” podrazumijeva se

”As Variant”. Moguce

je nabrajanje, ali za svaku varijablu treba navesti”As ¡tip¿”, npr. u

Dim x, y As Integer

Dim a As String, b As Date

rezultat je da ce x biti tipa Variant. Deklaracije varijabli mogu biti nanivou procedure (u pravilu na pocetku iste) - tada varijable

”zive” samo za

vrijeme izvodenja iste; na nivou modula (deklaracija prije prve procedure) ilipak dostupna svim procedurama u workbook-u (deklaracija s Public).

Poseban slucaj su Static-varijable. One su varijable na nivou procedure,ali im se vrijednost ne resetira (memorija se ne oslobada) po zavrsetku iste.Deklariraju se ovako:

Static <ime_varijable> (As <tip>)

Konstante su isto sto i varijable s fiksiranom vrijednosti. Deklariraju sesa

Const <ime_konstante> (As <tip>) = <vrijednost>

Ukoliko cemo puno puta koristiti istu konstantu, primjerice 3.14159, is-plati ju se deklarirati kao konstantu jer ce kod biti citljiviji, a i lakse joj jepromijeniti vrijednost.

Stringovi se stavljaju pod dvostruke navodnike. Ukoliko zelimo da nekiznak stringa bude dvostruki navodnik, stavlja se dvaput:

MsgBox "My name is "" Peter"""

ce ispisati ”My name is ”Peter” ”.Pri deklaraciji, mozemo im fiksirati maksimalnu duljinu (max):

Dim <ime> As String * <max>

Deklaracija unutar Sub odnosi se samo na samu proceduru, tj. takodeklarirane varijable i konstante postoje samo dok se procedura izvodi. Akovarijablu ili konstantu deklariramo prije naredbe Sub, biti ce dostupna svimprocedurama u modulu. Ako pak zelimo da varijabla/konstanta bude dos-tupna svim procedurama u svim modulima vaseg workbook-a, deklaracijutreba zapoceti kljucnom rijeci Public (i staviti je ispred naredbe Sub).

Page 7: Visual Basic App

3 Unos i ispis podataka 7

3 Unos i ispis podataka

Programi nemaju smisla bez komunikacije s korisnicima. Najjednostavnijinacin postise se koristenjem funkcija MsgBox i InputBox. O njima ce viserijeci biti kasnije, a ovdje cemo ih koristiti samo u najjednostavnijoj varijanti.

MsgBox <nesto>

proizvodi prozorcic u kojem je ispisano to”nesto” (ako je to varijabla,

onda njena vrijednost) i gumb”OK”. Moguce je kombiniranje vise kompo-

nenti, npr. ako je u varijabli xxx neki rezultat, mozemo”pristojno” ispisati

isti naredbom

MsgBox "Rezultat je " & xxx

x = InputBox("Poruka")

rezultira prozorcicem s poljem za unos, iznad kojeg je ispisana”Poruka”.

Rezultat unosa se sprema u varijablu x.

4 Operacije

Osnovne operacije koje mozemo raditi s varijablama numerickog tipa su +, −, ∗ , / i . S cjelobrojnim podacima mozemo provesti i cjelobrojno dijelenje (\)i odredivanje ostatka pri dijeljenju (Mod). Stringove mozemo konkatenirati(&).

5 Zadaci

1. Napravite proceduru u varijablu x (nekog numerickog tipa) stavlja nekuvrijednost i ispisuje ju.

2. koja ispisuje poruku (npr. Hello, ¡Vase ime¿!). ¡Vase ime¿ treba bitiuneseno od strane korisnika.

3. Napisite proceduru koja zbraja (mnozi, oduzima, . . . ) dva broja kojaunese korisnik i ispisuje rezultat.

4. Napravite proceduru koja ucitava radijus kruga i ispisuje njegov opsegili povrsinu.

Page 8: Visual Basic App

6 Funkcije Date, Now i Time 8

6 Funkcije Date, Now i Time

S Now(), Date() odnosno Time() dobivamo trenutni sistemski datum i/ilivrijeme.

Sub ShowDate()

MsgBox Date

End Sub

7 Range objekt

Range objekt sastoji se od jedne ili vise celija u tablici. Celije se specificirajuslovom i brojem (stupac i redak). Tako recimo celiji B4 pristupamo kao

Range("B4")

Trebalo bi biti ocito sto znace iduci zapisi:

Range("A1:C5")

Range("3:3")

Range("D:D")

Range("A1:B8,D9:G16")

Kao i svi objekti, Range-ovi imaju svojstva. Najvaznije medu njima jeValue - vrijednost u celiji.

Range("A1:C5").Value = 5

x = Range("A9").Value

Page 9: Visual Basic App

8 Zadaci 9

Svojstvo Value je defaultno. Pri naredbi”x = Range(”A9”).Value” pridruzuje

se vrijednost celije, neovisno o formatiranju (recimo, ako u celiji A9 imamo1,50%, u x se sprema 1.5). Zelimo li uzeti formatirani oblik (string!) koris-timo svojstvo Text:

”y = Range(”A9”).Text” spremilo bi ”1,50%” u y.

Broj celija u nekom Range dobije se svojstvom Count, broj prvog odstupaca u Range s Column, a broj prvog od redaka s Row:

koliko = Range("A1:C5").Count

prvi_stupac = Range("A1:C5").Column

prvi_redak = Range("A1:C5").Row

8 Zadaci

1. Napravite proceduru koja ispisuje neku poruku (npr. Hello, world!) uceliju C7.

2. Napisite proceduru koja zbraja brojeve u celijama A1, A2, A3 i rezultatupisujeu B1.

3. Napravite proceduru koja ucitava radijus kruga iz celije A1 i ispisujenjegov opseg u A2 i povrsinu u A3.

9 Naredba granjanja

Cesto je izvodenje neke naredbe (ili vise njih) ovisno o zadovoljenosti nekoguvjeta. Svi programski jezici zbog toga poznaju naredbu grananja if-then.

Sintaksa je kako slijedi:

If <uvjet> Then <naredba>

Primjerice

If x = 0 Then MsgBox "Nula je."

Zapravo imamo opcenitije strukture:

Page 10: Visual Basic App

10 Cells property 10

If <uvjet> Then

<naredbe 1>

Else

<naredbe 2>

End If

i

If <uvjet 1> Then

<naredbe 1>

ElseIf <uvjet 2> Then

<naredbe 2>

ElseIf <uvjet 3> Then

<naredbe 3>

...

Else

<naredbe>

End If

Za postavljanje uvjeta dobro dodu logicki operatori: And, Or, XoR(ili-ili), Eqv (logicka ekvivalencija), Imp (logicka implikacija) i Not. Zausporedivanje vrijednosti koriste se =, ¡¿, ¡, ¿, ¡=, ¿=.

Za slucaj da imamo odabir izmedu vise od dvije opcije u ovisnosti o istomtipu uvjeta korisna je naredbe

Select Case <uvjet>

Case <slucaj1>: <naredba 1>

...

End Select

10 Cells property

Cells prima dva argumenta: red i stupac. Tako recimo

Cells(2,3)

Page 11: Visual Basic App

11 Clear i ClearContents metode 11

referira na celiju C2 u aktivnom worksheet-u. Cells je osobito koristan ukombinaciji s Range objektom:

Range(Cells(1,1),Cells(10,10)).Value=5

postavlja vrijednost 5 u sve celije od A1 do J10. To smo dodus moglinapraviti i s

Range(A1:J10).Value=5

no prednost Cells je sto moze primati varijable kao argumente:

Range(Cells(i,j),Cells(i,j)).Value=5

postavlja vrijednost 5 u celiju u i-tom redu i j-tom stupcu, pri cemu su ii j mogli biti primjerice uneseni od strane korisnika.

11 Clear i ClearContents metode

Zelimo li iz modula pobrisati sadrzaj nekih celija, to mozemo postici pomocumetoda Clear i Delete.

Range("A1:J10").Clear

brise i sadrzaj i formatiranje celija od A1 do J10,

Range("A1:J10").ClearContents

brise samo sadrzaj (a cuva formatiranje).

12 Logicki operatori

Not, And, Or, XoR, Eqv, Imp

Page 12: Visual Basic App

13 Select-Case 12

13 Select-Case

Select Case <izraz>

Case <uvjet1>

<naredba1>

Case <uvjet2>

<naredba2>

...

Case Else

<naredba>

End Select

Primjerice,

Select Case x

Case 0 To 24

p = 0.1

Case 25 To 49

p = 0.15

Case 50 To 74

p = 0.2

Case Is >= 75

p = 0.25

Case Else

MsgBox "Greska: nema smisla da narucujete manje od 0 komada."

End Select

14 Polja

Dim <ime polja>(<m> to <n>) As <tip>

generira polje elemenata zadanog tipa ciji prvi clan ima indeks m, a zadnjin.

Elementu polja pristupamo preko indeksa:

Dim polinom(0 to n) As Single

polinom(0)=2

Page 13: Visual Basic App

15 For-petlja 13

Visedimenzionalna polja generiraju se analogno, primjerice

Dim A(1 to 10, 1 to 10) As Integer

A(1,1)=1

A(1,2)=0

15 For-petlja

Cesto je potrebno odredene naredbe izvrsiti vise puta. Za to programskijezici poznaju posebne naredbe - petlje.

Prva od petlji u VBA je For-Next petlja.

For <brojac>=<pocetna vrijednost> To <konacna vrijednost> _

(Step <korak>)

<naredbe>

Next <brojac>

Eventualni prijevremeni izlaz postize se s

Exit For

.Kao prvi zadatak iz petlji, generirajte nulmatricu velicine zadane od

strane korisnika pocevsi od celije A1. Zatim jedinicnu matricu.

16 Do-While i Do-Until-petlja

Do While/Until <uvjet>

<naredbe>

(Exit Do)

Page 14: Visual Basic App

17 Reakcije na dogadaje 14

<naredbe>

Loop

17 Reakcije na dogadaje

VBA programe moze se pokrenuti i automatski, kad god se desi odredenidogadaj (event), primjerice pri svakom otvaranju workbook-a. Popis osnovnihdogadaja koji se odnose na workbook je: Open, BeforeClose, BeforePrint,BeforeSave, NewSheet. Popis osnovnih dogadaja koji se odnose na worksheetje: Activate, BeforeDoubleClick, BeforeRightClick, Change.

Pisemo li program koji se treba aktivirati vezano za odredeni dogadaj,treba VBE otvoriti na nivou odgovarajuceg objekta i u gornjem lijevom dijeluodabrati objekt (Workbook, Worksheet) na koji se odnosi. Gore desno taddobijete i padajuci izbornik s popisom svih dogadaja vezanih za taj objekt.Odaberite prikladni i napisite program koji se treba izvesti kad se taj dogadajpokrene.

18 Jos nesto zgodno. . .

U worksheet mozemo unijeti i objekt, primjerice kvadratic s upisanim tek-stom. Desnom tipkom misa i odabirom Assign Macro mozemo odabrati kojice se modul pokrenuti pritiskom na taj

”gumb”. Ako znate da Rnd vraca

slucajan decimalni broj izmedu 0 i 1, napisite modul koji iz worksheet-a”Sheet1” u kojem u A-stupcu imamo neke unose u celijama, ali ciji broj nijeunaprijed odreden, nego ga korisnik unosi u celiju B1 u ”Sheet2” odabire trislucajne celije i ispisuje ih na istom papiru. Pritom se pritiskom na gumb ko-jeg kreirate u ”Sheet2” taj modul mora aktivirati odredeni broj puta, kolikopise u celiji B2 u ”Sheet2”.