Arvutiõpe, 13. kord

Tere ja head jätkuvat aastat!

Seekord vaatame makro koostamist Excelis.

Esmalt tuleb avada Excel, vaadata, kas Arendaja (ingliskeelses Excelis Developer) menüü on nähtav. Kui ei ole, siis saab lisada nõnda:

https://support.microsoft.com/et-ee/office/men%C3%BC%C3%BC-arendaja-kuvamine-e1192344-5e56-4d45-931b-e5fd9bea2d45 (eestikeelne Excel)

https://support.microsoft.com/en-us/office/show-the-developer-tab-e1192344-5e56-4d45-931b-e5fd9bea2d45 (ingliskeelne Excel)

Mõistlik oleks fail ka salvestada ja kindlasti makroteoga (macro-enabled) failina (laiend .xlsm):

https://help.insightsoftware.com/s/article/e1-how-do-i-save-my-excel-workbooks-that-contain-macros

Arendaja ribalt valida Visual Basic.

Avanevas aknas on näha kõik Exceli VBA seotud osad, vasakpoolses menüüs VBAProject (failinimi) ja selle all töövihiku lehed. Hiire parema klahviga vajutada nt VBAProject (failinimi), avanevast menüüst valida Insert -> Module. Alajaotuse Modules alla tekib uus ModuleX ja parempoolsesse aknasse tühi leht.

Siia saabki kirjutada endale sobiva makro koodi.

Alamprogrammi alustatakse sõnaga Sub, millele järgneb makro nimi (NB! Nimi tuleb ise valida, peab moodustama terviku, nt erinevate sõnade vahel saab kasuta allkriipsu, samuti ei tohi kasutada täpitähti, erimärk jne) ja sellele omakorda sulud, ehk siis nt kirjamakro loomiseks nt kirjutan sedasi:

Sub Andmeanalyys()

Kui vajutada Enter klahvile, lisab Excel automaatselt ka makro lõpu, mille tulemusena tekib tekst:

Sub Andmeanalyys()

End Sub

Nende kahe rea vahele tulebki meie makro tekst. Tekitame nt sellise makro, mis kuvab meile töölehel Algandmed lahtris A1 toodud väärtus.

Selleks tuleb esmalt olemasolevasse faili tekitada tööleht nimega Algandmed. Mina nimetan näiteks ümber lehe Sheet1 (kasutan ingliskeelset Excelit, eestikeelse puhul on lehe nimi Leht1). Selleks liigun tagasi aknasse, kus on kuvatud minu töölehed (arvutiekraani alumisel ribal liikude hiirega üle Exceli ikooni, ilmuvad kõik Exceli aknad, teine variant on kasutada klahvikombinatsiooni Alt ja Tab, mis võimaldab liikuda erinevate akende vahel.

Hiire parema klahviga vajutan seejärel töölehe nimele Sheet1 (eestikeelses versioonis Leht1) ja valin menüüs Rename (Nimeta ümber). Ja panen töölehele nime Algandmed.

Seejärel liigun tagasi makrokoodi aknasse ja lisan koodi selleks, et Excel teaks, millise lehega tööd teha:

Set leht=ThisWorkbook.WorkSheets(“Algandmed”)

Ja võtame sealt nt vaatluse alla lahtri, mille aadress on A1, eeldame, et seal on number, omistame selle muutujale arv1 ja seejärel kuvame seal sisalduva info:

arv1 = leht.Range(“A1”)
MsgBox arv1

Kokku saab siis praegusel hetkel makro selline:

Sub Andmeanalyys()

Set leht = ThisWorkbook.Worksheets(“Algandmed”)
arv1 = leht.Range(“A1”)
MsgBox arv1

End Sub

Nüüd aga oleks testimise jaoks vaja see makro ka tööle rakendada. Selleks lisame töölehele Algandmed nupu.

https://support.microsoft.com/et-ee/office/makro-m%C3%A4%C3%A4ramine-vormile-v%C3%B5i-nupule-juhtelement-d58edd7d-cb04-4964-bead-9c72c843a283 (eestikeelne Excel)

https://support.microsoft.com/en-us/office/assign-a-macro-to-a-form-or-a-control-button-d58edd7d-cb04-4964-bead-9c72c843a283 (ingliskeelne Excel)

Nupule on võimalik lisada tekst, hiire parema klahviga nupule vajutades ja valides Edit Text (Muuda teksti) ja kirjutan nt teksti Analüüsi.

Seejärel tuleb nupule lisada ka makro – taaskord hiire parema klahviga nupule vajutades ja seekord valides Assing Macro (Määra makro) ja avanevast menüüst valida makro, minul siis Andmeanalüüs ja vajutada OK.

Nüüd saame makrot ka testida, vajutades nupule peaks ilmuma ekraanile aken, mis, kui lehel Algandmed on lahter A1 tühi, peaks olema samuti tühi.

Kui nüüd vajutada OK ja sisestada lahtrisse A1 mingi info, siis peaks ekraanil olev aken seda info sisaldama.

Koduseks ülesandeks jääb:

  1. sisestada lahtritesse A1, A2 ja A3 numbrid
  2. makrot täiendada selliselt, et:
    1. loetaks infot ka lahtritest A2 ja A3
    2. kuvatakse kõik numbrid eraldi real (erinevate osade ühendamise kasutada & märki ja uue rea jaoks vbNewline – ehk siis nt arv1 & vbNewline jne)
    3. kuvatakse ka numbrite summa (matemaatiline liitmine, nt kui arvud on arv1, arv2 jne, siis summa on arv1+arv2 jne)