Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zbirni makro za Open office Calc

[es] :: Office :: Zbirni makro za Open office Calc

[ Pregleda: 3782 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Brodoplovac
Beograd

Član broj: 171299
Poruke: 829
*.adsl.verat.net.



+163 Profil

icon Zbirni makro za Open office Calc04.09.2010. u 12:49 - pre 134 meseci
Imam snimljene makroe Macro1, Macro2, Macro3... Želim da kliknem na button i da se svi oni izvrše redom. Znači to bi trebalo da izgleda ovako.

run Macro1
pređi na sledeći sheet
run Macro2 and run Macro3
pređi na sledeći sheet
pređi na sledeći sheet
run Macro2 and run Macro3
pređi na sledeći sheet
run Macro1
pređi na sledeći sheet
pređi na sledeći sheet
pređi na sledeći sheet
run Macro 3
vrati se na prethodni sheet
vrati se na prethodni sheet
run Macro 2

Očigledno mi trebaju tri podprograma:
1) pokreni dati makro
2) pređi na sledeći sheet
3) vrati se na prethodni sheet

U Excelu znam da snimim makro koji pokreće druge makroe. To nisam uspeo da postignem u Caclu. Ne mogu da pronađem odgovarajući kod na netu pa mi treba pomoć.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Zbirni makro za Open office Calc04.09.2010. u 13:32 - pre 134 meseci
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
Prikačeni fajlovi
 
Odgovor na temu

Brodoplovac
Beograd

Član broj: 171299
Poruke: 829
*.adsl.verat.net.



+163 Profil

icon Re: Zbirni makro za Open office Calc04.09.2010. u 14:55 - pre 134 meseci
Hvala care!

Skapirao sam sve što piše ali ne mogu sada da isprobavam, probaću večeras.
Mnogo mi se više sviđa .getByName("List2") verzija jer mi dozvoljava da naknadno menjam raspored šitova a da makro ostane i dalje validan. Nju ću i da koristim.

Primetio sam i ja da su snimljeni makroi u Calcu jako čudni i nečitljivi. Ono što mi se sviđa kod njih je što nakon njihove upotrebe mogu da koristim undo. Npr. imam neke makroe što brišu podatke i ne bih voleo da nakon pogrešne upotrebe takvog makroa ne mogu da uradim undo.

Kod Excela nije moguće uraditi undo nakon izvršenja makroa. Ono što me zanima je - ako ja napišem ručno makro za Calc, da li mogu i tada da koristim undo?

Što se tiče učenja Star basica, nisam neki entuzijasta. Ipak je to jezik sa vrlo malom primenom. VB se sa druge strane koristi svuda. Jednog dana će VB biti uveden čak i u Open Office. Držaću se ja snimljenih makroa, a kod ću učiti samo kad moram. Hvala na predloženoj literaturi, nadam se da je "čitljiva" i za početnika kao što sam ja.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Zbirni makro za Open office Calc04.09.2010. u 15:13 - pre 134 meseci
Da, opozivanje radi isto kod ručno pisanih i snimljenih makroa. U oba slučaja svaka mala promena u makrou je posebna akcija za opozivanje. Izvršavanjem makroa Macro1 treba dva puta kliknuti, prvi put za tekst 1111 i drugi za 2222 u drugom listu. Ako makro pravi veliki broj izmena može se dogoditi da prekorači broj koraka opoziva (podešava se u Alatke > Podešavanje > Memorija).

Veća je šansa da VBA postane zastareo. U izdanju MS Office 2008 za Mac su ga već izbacili. Sada pričaju da će ga vratiti u Office 2011, ali šta da rade ljudi sa svojim makroima, to niko ne pominje. OOoBasic koristi isti programski jezik kao i VBA, ali se razlikuje objektni model dokumenta, tablice,... tj. nazivi objekata i funkcija koje program poziva iz makroa.

OpenOffice.org dozvoljava pisanje makroa i u Pythonu, JavaScriptu i u Java BeanShell skriptu. Razvojno okruženje je najviše razvijeno za OOoBasic, dok JavaScript i BeanShell imaju neku podršku. Za pisanje Python koda se mora koristiti neko nezavisno okruženje. Dokumentaciju za OOoBasic je najlakše pronaći, ipak programeri koji već imaju iskustva sa Python/JavaScript i poznaju biblioteke za ove jezike mogu da iskoriste njihovu punu snagu za pisanje makroa.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Brodoplovac
Beograd

Član broj: 171299
Poruke: 829
*.adsl.verat.net.



+163 Profil

icon Re: Zbirni makro za Open office Calc04.09.2010. u 19:10 - pre 134 meseci
Evo uspeo sam da uradim ono što sam hteo:
Code:
sub main  
doc=thiscomponent
selectSheetByName(doc, "Specifikacija")
Specifikacija.SazimanjeVelSpecifikacije
doc=thiscomponent
selectSheetByName(doc, "1")
doc=thiscomponent
selectSheetByName(doc, "2")
Odeljenja.SazimanjeOdeljenja
end sub
   
Sub selectSheetByName(doc, sheetName)
doc.getCurrentController.select(doc.getSheets().getByName(sheetName))
End Sub


Nešto mi ipak ne štima. Potrebna mi je još jedna komanda koja bi sprečavala izvršavanje makroa na datom šitu ukoliko je tačno određena ćelija tog sheet-a prazna. Znači ovako:

Code:
if A1=blank then
Odeljenja.SazimanjeOdeljenja
else
do nothing
endif
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Zbirni makro za Open office Calc04.09.2010. u 19:37 - pre 134 meseci
U prethodnoj poruci tu je primer kako se pristupa ćeliji na dva načina. Jedno je numerički getCellByPosition, a drugo preko reference getCellRangeByName. Dakle, biramo ćeliju:

Code:
  sheet = doc.getCurrentController.getActiveSheet
  cell = sheet.getCellRangeByName("A1")


Ovde se koristimo time da je list već izabran preko selectSheetByName(), a moglo je i direktno ovde
sheet = ThisComponent.getSheets.getByName("List2").

Sada treba grananjem proveriti da li je ćelija prazna. Mogli bismo da koristimo trik da će kada je ćelija prazna njena tekstualna vrednost biti prazna niska ("").

Code:
If cell.String = '' Then        ' imamo još .Value i .Formula
  Odeljenja.SazimanjeOdeljenja
End If


Još bolje je zaista proveriti da li je ćelija prazna, tj. da li je njena vrsta EMPTY:

Code:
If cell.Type = com.sun.star.table.CellContentType.EMPTY Then
  Odeljenja.SazimanjeOdeljenja
End If


Else grana nam ne treba jer nema ništa u njoj.

Svi ovi primeri su sa http://wiki.services.openoffice.org/wiki/Spreadsheet_common

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

dejanrdr

Član broj: 279466
Poruke: 5
*.adsl-a-2.sezampro.rs.



Profil

icon Re: Zbirni makro za Open office Calc19.03.2013. u 15:24 - pre 103 meseci
pozdrav svima
potrebna mi je mala pomoc oko izrade makroa za libre office calk
naime u exelu da bi prilokom otvaranja novog računa dobili sledeci redni broj pisemo macro

Sub NextInvoice()
Range("broj ćelije u kojoj se nalazi redni broj").Value = Range("broj ćelije u kojoj se nalazi redni broj").Value+1
End Sub


kako ovo ide u libre officu?

Bio bih veoma zahvalan na pomoći
 
Odgovor na temu

[es] :: Office :: Zbirni makro za Open office Calc

[ Pregleda: 3782 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.