Hogyan kell VBA ban makrót írni?

Ha bizonytalan vagy itt kezdd!
polgar79
Hozzászólások: 6
Csatlakozott: 2013. január 3., csütörtök 15:09

Hogyan kell VBA ban makrót írni?

Hozzászólás Szerző: polgar79 »

Sziasztok.Teljesen kezdő vagyok ezen a téren.Maga a program nem ismeretlen számomra de még nem írtam hozzá soha makrót.Hol kezdjem. Annó MSoffice-ban már voltak próbálkozásaim de gondoltam megpróbálkozok vele itt.Nem maga a VBA nyelv érdekelne hanem hogyan kezeli a VBA-t az OpenOffice.Köszönöm.Ha baromságot kérdeztem töröljétek nyugodtan.
OpenOffice 3.4.1 Windows 7 en
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4034
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Hogyan kell VBA ban makrót írni?

Hozzászólás Szerző: Zizi64 »

A "baromság" annyiból igaz, hogy ApacheOpenOffice illetve LibreOffice alatt NINCS VBA nevezetű programnyelv, vagy programozói felület.

Itt a Basic nyelvet StarBasic-nek, vagy csak Basic-nek hívjuk. És bár az alap Basic utasítások nagyon hasonlóak, mint az MS-nél, vagy bármely más Basic fejlesztőrendszerben, a nagy különbség (az inkompatibilitás) abból adódik, hogy a Basic nyelv elemeivel elérhető API függvények egészen mások, mint az MS-nél.
(API: Application Programming Interface)
A beépített Basic IDE (Integrated Development Environment) tulajdonképpen a változó deklaráláson, néhány alapfüggvényen (sin, cos... stb), a ciklusképzésen túl semmit nem tud, de képes vagy a segítségével meghívni azt a rengeteg függvényt, eljárást, amit az API tartalmaz. Ezekkel tudod "megszólítani" az alkalmazást, az aktuálisan szerkesztett vagy egyéb dokumentumot és annak egy jól körülhatárolt részét. (Például az éppen szerkesztés alatt lévő Calc dokumentum egyik munkalapjának egyetlen celláját.)

Tehát neked inkább az API-t kell megismerned (a neten megtalálod mindkét programág dokumentumai között az API függvényeket.

Ha például az A1, A2 cellában két egyenáramú ellenállás értéket tárolsz, és szükséged van a párhuzamos eredőjük számértékére, és erre írnál egy saját függvényt, akkor a Basic szerkesztővel a dokumentum, vagy a program Standard könyvtárába egy új Modulba ennyit kell írnod:

Kód: Egész kijelölése

function R_parh(R1, R2 as double) as double
       R_parh=R1*R2 / (R1+R2)
end function
Természetesen ez az egyszerű megvalósítás nem tartalmaz semmiféle hibakezelést (Például: ne legyen 0-val való osztás, ha R1=R2=0 Ohm)
Ezt a függvényt az A3-as cellában így tudod használni:
=R_parh(A1;A1)

Ez esetben neked csak a számítás megírásával kellett törődnöd, magának az alkalmazásnak a vezérlése nem a te gondod volt.

Lássunk arra is egy példát:

Kód: Egész kijelölése

Sub SetCellText

Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object   
 
oDoc = ThisComponent 'a dokumentum megszólítása: "éppen ezt a szerkesztés alatt álló dokumentumot szeretném módosítani a programommal"
oSheet = oDoc.Sheets(0) 'száma szerint megszólítjuk a 0. számú munkalapot - természetesen megszólíthatod a neve szerint is, de akkor API másik eljárást kell használni
 
oCell = oSheet.getCellRangeByName("A1") 'neve szerint megszólítjuk a cellát
oCell.String = "Teszt" ' és beleírjuk a cellába a szöveget

End sub
Ezt írhattam volna egy sorba is:

Kód: Egész kijelölése

ThisComponent.Sheets(0).getCellRangeByName("A1").String = "Teszt"
, de ha később ugyanazon dokumentum, ugyanazon munkalapjának másik celláját akarom megszólítani, akkor jól jön, hogy a megszólítás részei már változó (névvel rendelkező objektum; /Object/) formájában a rendelkezésemre állnak.

Két alappéldát láthattál itt, de nagyon sok mindent kell átnézned ahhoz, hogy hatékonyan tudd programozni az Open/LibreOffice-t


Csak a Basic-hez van beépített ide, tehát csak Basic programkódot tudsz közvetlenül az alkalmazás alatt megírni, és rögtön ki is próbálni. A többi beépített programnyelvek (Python, JavaScript, BeanShell) - számomra legalábbis eddig - nem hoztak semmi sikerélményt.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4034
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Hogyan kell VBA ban makrót írni?

Hozzászólás Szerző: Zizi64 »

Aztán:

Magát a Basic kódot az Eszközök - Makrók - Makrók rendezése - (OpenOffice.org Basic/LibreOffice basic) - Saját makrók - Standard vagy [Fájlnév] - Standard könyvtár - Új (Modul)

Azaz "Standard" nevű könyvtár van egy az AOO/LO program megfelelő mappájában, de minden egyes dokumentum is tartalmaz Standard könyvtárat. Ebből az is következik, hogy a AOO/LO program Standard könyvtárába mentett makrók bármikor, bármelyik dokumentumból elérhetők, míg a dokumentumok Standard könyvtárába mentett makrók csak abból az egyetlen dokumentumból érhetők el.

Tehát a konkrét tárolóhely a makrókód számára a "Modul". Ebből létrehozhatsz jó sokat, de egyetlen modulba is több függvényt, és/vagy eljárást beletehetsz.

Könyvtárból is lehet több - elvileg -, de automatikusan csak a Standard könyvtár töltődik be, a többi könyvtár betöltéséről a programozónak/felhasználónak kell gondoskodnia. A "Tools" könyvtár betöltéséről számos helyen van példa a neten.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Válasz küldése