1) Ako ste drugi makro snimili kao proceduru "Macro2" u istoj biblioteci, da je izvršite dovoljno je da u drugoj navedete njeno ime u redu gde želite da se izvrši:
Code:
...
Macro2
...
2) i 3)
Sledeća procedura bira list po rednom broju:
Code:
Sub selectSheetByIndex(doc, index)
doc.getCurrentController.select(doc.getSheets().getByIndex(index))
End Sub
Prvi list je 0, drugi 1 i tako redom. Ukupan broj listova dobijate sa
doc.getSheets.Count, pa to možete da koristite kao gornju granicu u for petlji:
http://wiki.services.openoffic...ocumentation/BASIC_Guide/Loops
U snimljenom makrou poziv bi bio
selectSheetByIndex(ThisComponent, 1) da odaberete drugi list. Nad kolekcijom listova pored
.getByIndex(index) postoji i metod
.getByName("List2") pa to možete iskoristi da napravite novu proceduru koja listu pristupa po imenu.
Zakačio sam uz poruku primer u kome su dva snimljena makroa i ova funkcija. Macro1 nakon što upiše u A1 vrednost "1111" prebacuje na drugi list i poziva Macro2 koji upisuje vrednost "2222".
Inače savetujem vam da ako makro koji pravite nije neko kratkoročno rešenje koje više nikada neće trebati ne koristite snimanje makroa. Kod koji se tako dobija je nečitljiv i preterano opširan pa su fina prilagođavanja veoma teška. OpenOffice.org Basic dijalekat nije težak za savladavanje, a pored literature na vikiju preporučujem i knjigu koju je napisao Andrew Pitonyak i besplatan vodič koji možete preuzeti sa njegovog sajta
http://www.pitonyak.org/book/
Ako se ne koriste snimljeni makroi, isti ovaj primer iz priloga izgleda znatno čitljivije:
Code:
Sub Macro1
dim sheet as object, cell as object
sheet = ThisComponent.Sheets(0) ' sheet index
cell = sheet.getCellByPosition(0, 0) ' column, row
cell.Value = 2222 ' .String = "2222"
' .Formula = "=SUM(...)"
Macro2
End Sub
Sub Macro2
dim sheet as object, cell as object
' referenciranje može i ovako, postoji i .getByName('List2')
' moguće je odjednom povući opseg ćelija ili navesti i list u referencu
sheet = ThisComponent.getSheets.getByIndex(1)
cell = sheet.getCellRangeByName("A1")
cell.Value = 1111
End Sub
Odlična kolekcija primera postoji ovde:
http://wiki.services.openoffice.org/wiki/Spreadsheet_common
[Ovu poruku je menjao Goran Rakić dana 04.09.2010. u 16:21 GMT+1]
[Ovu poruku je menjao Goran Rakić dana 04.09.2010. u 16:22 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja