Lépések:
Eszközök -> Makrók -> Makrók rögzítése ...
A LibreOffice 3.3.2 verzióját használva ez utóbbi menüpont nekem nem aktív. Makrót persze így is tudok készíteni, csak felvenni nem.
Később így tették ide:
Eszközök -> Beállítások -> Általános -> Kísérleti (instalbil) funkciók engedélyezése
A 3.6.x verziókban már külön jelölőnégyzetet kapott:
Eszközök -> Beállítások -> Általános -> Makrórögzítés engedélyezése (korlátozott)
OpenOffice.org/LibreOffice:
Nézet -> Eszköztárak -> Űrlap-vezérlőelemek
Az előugró kúszóablakon a negyedik ikon a „Vezérlőelemek” Ezt legördítve tudunk elhelyezni gombokat. A tervező módot ki és bekapcsolni.
Az elkészült nyomógombhoz eseményt kell rendelnünk. Ki kell választanunk a nyomógombnak mely eseményéhez rendeljük a makrót. Célszerűen lehet ez az „Egérgomb lenyomása”.
Szerkesztő módban a nyomógomb felett kattintsunk jobb egér gombbal, majd az előugró menüből válaszuk a „Vezérlőelem…” menüpontot. Az előugró ablakban az „Események” fülre kattintunk. Ott kikeressük a fenti eseményt (Egérgomb lenyomása), a mellette lévő gombra kattintunk, amelyen három pont van.
Egy művelet hozzárendelése nevű ablak fog megjelenni. Ebben a „Makró …” gombra kattintva megkeressük az elkészített makrót, majd mindent okézok.
Ha be van kapcsolva az űrlap-vezérlőelemek panel, találunk rajta egy Tervező mód be/ki gombot. Kapcsoljuk ki a tervező módot és használhatjuk a gombot.
A Basic programokat a következő módon írhatunk:
Alt + F11
Vagy:
Eszközök -> Makrók -> Makrók rendezése -> OpenOffice.org Basic...
Az előugró ablakban kiválasztjuk melyik makrót szeretnék szerkeszteni, esetleg újat kezdünk. Egy új makró elkezdéséhez, az előugró ablakban a „Main” makrónevét írjuk át saját új makrónévre. Ekkor a „Törlés” gomb „Új” feliratra vált.
A makrók Basic nyelven íródnak. A felvétel mellett mi magunk is írhatunk ilyen programokat. Ehhez ismernünk kell egy dokumentum szerkezetét Basic nyelven.
Hozzáférés egy munkafüzet, első munkalapjához:
Dim Dok As Object Dim Fuzet As Object Dok = ThisComponent Fuzet = Dok.Sheets(0)
A példában felveszünk egy Dok és egy Fuzet nevű változót, amelyek objektum típusúak lesznek. Az Dok magát a Dokumentumot fogja jelképezni, a Fuzet pedig a munkafüzetet. A harmadik sorban meghatározzuk, hogy a Dok változó milyen objektumra mutasson: ThisComponent, amely az aktuális dokumentumot jelenti. Az utolsó sorban a megadjuk, hogy a Fuzet változó a dokumentum melyik munkafüzetére mutasson. A Sheets(0) az első munkafüzetet jelenti. Látható, hogy a munkalapok számozása 0 értékkel kezdődik.
A munkalapokra azonban hivatkozhatunk nevével is:
Dim Dok As Object Dim Fuzet As Object Dok = ThisComponent Fuzet = Dok.Sheets.getByName("Munkalap1")
Cella = Fuzet.getCellByPosition(0,2)
Esetleg angolosan:
Cell = Sheet.getCellByPosition(0,2)
A munkafüzet első oszlopának száma 0, az első sorának száma 0. Tehát az A1 cellára így hivatkozunk:
Cell = Sheet.getCellByPosition(0,0)
Cella.Value = 1000
vagy angolosan:
Cell.Value = 1000
REM ***** BASIC ***** Sub Main Doc = ThisComponent Sheet = Doc.Sheets.getByName("Munkalap1") Cell = Sheet.getCellByPosition(0,2) Cell.Value = 1000 End Sub
Sub Main Dok = ThisComponent Munkalap = Dok.Sheets(0) CellaTartomany = Munkalap.getCellRangeByName("B2:D5") MsgBox CellaTartomany.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE) End Sub
Sub Main dim sheet as object dim cell as object dim doc as object doc = thiscomponent sheet = doc.sheets.getbyname("Munkalap1") cell = sheet.getcellbyposition(0,0) MsgBox(cell.string, 120, "Címsor") End Sub
Sub Main Sheet = ThisComponent.Sheets(0) tar = Sheet.getCellRangeByName("A1:A5") osszeg = 0 for i = 0 to 4 a = tar.getCellByPosition(0,i).value osszeg = osszeg + a next i er = Sheet.getCellRangeByName("A6") er.Value = osszeg End Sub
MsgBox(„Kiírandó szöveg”, 16, „Címsor szövege”)
Szám | Ikon | Gombok |
---|---|---|
0 | Ok | |
1 | Ok, Mégse | |
2 | Megszakítás, Ismét, Mellőz | |
3 | Igen, Nem, Mégse | |
4 | Igen, Nem | |
5 | Ismét, Mégse | |
16 | X | Ok |
17 | X | Ok, Mégse |
18 | X | Megszakítás, Ismét, Mellőzés |
19 | X | Igen, Nem, Mégse |
20 | X | Igen, Nem |
21 | X | Ismét, Mégse |
32 | ? | Ok |
33 | ? | Ok, Mégse |
34 | ? | Megszakítás, Ismét, Mellőzés |
35 | ? | Igen, Nem, Mégse |
36 | ? | Igen, Nem |
37 | ? | Ismét, Mégse |
48 | ! | OK |
49 | ! | Ok, Mégse |
50 | ! | Megszakítás, Ismét, Mellőzés |
50 | ! | Igen, Nem, Mégse |
51 | ! | Igen, Nem |
52 | ! | Ismét, Mégse |
64 | izzó | Ok |
Sub Main print "Valami" End Sub
Sub Bevitel ertek = InputBox("Valai") MsgBox(ertek) End Sub
Sub Main For i = 1 to 10 print i Next i End Sub
Gyök:
print sqr(9)
A hatvány operátorral oldjuk meg:
a = 3^2
Szám egész része:
print int(3.7) ' Eredmény: 3
Szám 0 és 2 között:
print int(rnd * 3)
Dobókocka:
vel = int(rnd()* 6) + 1
1 és 6 közötti véletlen számot generál
Érték írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c6").Value = 47
Szöveg írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c7").String = "alma"
Képlet írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c8").Formula = "=SUM(A2:A5)"
Pozíció megadással:
Sub Main Sheet = thisComponent.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) 'Az A1-es cella Cell.Value = 85 End Sub
Cella koordináta nevének megadásával:
Sub Main Sheet = thisComponent.Sheets(0) Cell = Sheet.getCellRangeByName("C5") Cell.Value = 70 End Sub
com.sun.star.sheet.GeneralFunction.SUM
Sub OsszeadoMakro Munkafuzet = thisComponent.Sheets(0) Cella = Munkafuzet.getCellRangeByName("a1") Cella.Value = 3 Cella = Munkafuzet.getCellRangeByName("a2") Cella.Value = 2 Cella = Munkafuzet.getCellRangeByName("a3") Cella.Value = 9 Cella = Munkafuzet.getCellRangeByName("a4") Cella.Value = 4 Cella = Munkafuzet.getCellRangeByName("a5") Cella.Value = 7 Cella = Munkafuzet.getCellRangeByName("a6") Cella.String = "Összeg:" CellaTartomany = Munkafuzet.getCellRangeByName("a1:a5") eredmeny = CellaTartomany.computeFunction(com.sun.star.sheet.GeneralFunction.SUM) Cella = Munkafuzet.getCellRangeByName("b6") Cella.Value = eredmeny End Sub
Cella = thisComponent.Sheets(0).getCellRangeByName("A1") Cella.String = "Szöveg"
Vagy szám esetén:
Cella.Value = 45
Dim contentfile as String Open "c:\uzi.txt" for input as #1 Input #1, contentfile ThisComponent.Sheets.getByName("Munkalap1").getCellByPosition(0, 0).String = contentfile Input #1, contentfile ThisComponent.Sheets.getByName("Munkalap1").getCellByPosition(0, 1).String = contentfile Close #1
BasicLibraries.LoadLibrary("Tools") DialogLibraries.LoadLibrary( "Standard" )
REM ***** BASIC ***** Sub Main Dok = ThisComponent Fuzet = Dok.Sheets.getByName("Munkalap1") Cell = Fuzet.getCellByPosition(0,2) Cell.Value = 120 End Sub