Excel makró futtatása OpenOfficban

Táblázatkezelő
petivuu
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Excel makró futtatása OpenOfficban

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

Szép estét

A problémám adódott sajnos. Már egy ideje ismerkedem az Excel VBA és Visual Basic programozási nyelvel, viszont most OpenOfficban kellene nekem elindítanom egy makrót mely Excelben tökéletesen működik. Szakértő idejére és fordítására lenne szükségem, mivel hiába próbálkoztam mindenféle fordítóval vagy kikeresgélni a pontos fordítást a makróra, hogy OpenOfficban is működjön de nem jártam sikerrel. Természetesen megértem ha végül nem kapok segítő kezet, mivel időbe telik lefordítani a makrót, de engedelmetekkel megosztanám veletek.

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

Sub Riadok_Click()

Application.ScreenUpdating = False

Dim Objednávka As Worksheet
 Set Objednávka = ThisWorkbook.Sheets("Objednávka")
Dim Sor As Long
 Sor = Objednávka.Cells(Objednávka.Rows.Count, "A").End(xlUp).Row + 1

Objednávka.Activate
 ActiveSheet.Unprotect Password:="rudolf"
Range("A21:AC21").Select
Selection.Copy
Objednávka.Activate
Objednávka.Cells(Sor, 1).Select
Objednávka.Paste
ActiveCell.Value = Cells(ActiveCell.Row - 1, ActiveCell.Column).Value + 1
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
 ActiveSheet.Protect Password:="rudolf"

End Sub
Válaszaitokat előre is Köszönöm szépen!
OpenOffice 4.1.5 a Windows 10
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Már egy ideje ismerkedem az Excel VBA és Visual Basic programozási nyelvel, viszont most OpenOfficban kellene nekem elindítanom egy makrót mely Excelben tökéletesen működik.
No, akkor amit eddig megismertél, azt tedd el valahová (hátha még használod valamire), egy pillanatra felejtsd is el, és kezdjél el megismerkedni a StarBasic-kel. Az egy nagyon egyszerű Basic nyelv és egy beépített IDE (Integrált fejlsztői környezet) kombinációja. Ez eddig tényleg nagyon egyszerű lesz.
De azután meg kell ismernkedned az Apache OpenOffice és a LibreOffice 90-95 %-ban azonos API rendszerével. API: Application Programming Interface. Ez nem más, mint a programcsomag összes funkciójához megírt, azoknak a vezérléséhez használható függvény- és eljáráscsomag rengeteg különböző Basic-ből (is) meghívható kis szubrutinnal és függvénnyel. Ez a tanulási folyamat nem lesz egyszerű. Rengeteg információ és mintakód található itt ebben a fórumban és a többi lokális AOO/LO fórumokban (főleg az angol nyelvűekben), illetve Andrew Pitonyak ingyenes makróleírásaiban, könyveiben.
Hosszabb-rövidebb tanulás után képes leszel átírni a VBA makrókat StarBasic+API makrókká.

Azért most sem reménytelen a helyzet. A LibreOffice nagyobb kompatibilitással bír a VBA makrók terén, mint az AOO (célszerű telepíteni a legfrissebb LO Still verziót, akár az AOO mellé is), de mindkettőben kipróbálhatod az alábbi programkapcsolót:

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

Option VBAsupport 1
Ezt minden modulban a VBA kód elé kell beírni, és akkor (elvileg) a LibreOffice "érteni fogja" a VBA kódot. De ez tapasztalataim szerint sajnos csak az egyszerűbb makrók esetén fog valóban működni.

Természetesen SEMMIFÉLE direkt átjárás nincs a makrófuttatás területén a MS és a többplatformos nyílt forráskódú irodai csomagok között. Ha ezt az opciót bekapcsolod, és ODF formában elmented a dokumentumot, akkor (talán) AOO/LO-ban fog működni a makród és MSOffice-ban biztosan nem; ha pedig változatlanul hagyod a fájlodat, akkor pedig MSOffice-ban fog működni a makród de AOO/LO-ban nem.
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: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Ha makrófordítást vársz segítségül, akkor mindenképpen kell egy mintafájl, amiben ki lehet próbálni a makródat. Tehát az eredetivel azonos adat struktúra, és az eredetihez nagyon hasonló adatok kellenek. Ezt ODF fájlformátumban, a beágyazott makróval együtt fel kell töltened ide. (Nem kell bizalmas adatokat feltöltened ide, helyettesítsd azokat kitalált adatokkal).
Jó lenne, ha azt is le tudnád írni a saját szavaiddal, hogy mit is kellene a makrónak csinálnia. A funkció pontos ismerete többet segít, mint az ide bemásolt eredeti kód, mert lehet, hogy egy egészen más úton egyszerűbb megoldani a problémát, mint a direkt "kódfordítás".

Fordítóprogram nem létezik a VBA és az API+StarBasic között, azt gyakorlatilag újra meg kell írni.
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: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Ahogy a kódodat böngészem, ez nem nagyon csinál mást, mit hogy jelszóval feloldja a védelmet, másol valamit valahová, aztán bekapcsolja a védelmet.

A lapot, a cellákat aktiválni nem biztos, hogy szükséges, az AOO/LO makrókkal úgy is tudsz másolni, ha nem aktív a célcella. A kérdés csak az, hogy csupasz adatokat akarsz csak másolni, vagy a formázást is. (A direkt /manuális/ formázás helyett eleve a Cellastílusok használata a célszerűbb az AOO/LO-ban.)
Sőt valójában a Makrók bizonyos védelmi módokat meg is tudnak kerülni, hiszen bizonyos védelmi módok csak a kézi módosítás ellen védenek. Tehát TE nem tudsz írni egy bizonyos módon védett cellába, de a makró tud.

Megpróbálhatod a Makrórögzítővel is újraalkotni a makródat, ha tudod, hogy milyen aktivitásokra van szükség. Makrórögzítés közben mindig a menüket használd, mert a gyorsbillentyűkhöz kapcsolt aktivitások nagy részét a makrórögzítő nem fogja rögzíteni.
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].
petivuu
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

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

Nagyon szépen köszönöm az információt, mindenképpen utána olvasok ezeknek a programozási nyelveknek is.

A makrót amit szeretnék, azt írhatom ide, vagy nyissak egy teljesen új témát?
OpenOffice 4.1.5 a Windows 10
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

mindenképpen utána olvasok ezeknek a programozási nyelveknek is.
Az API nem programozási nyelv, az egy függvény- és eljárás "kupac", "könyvtár". A Basic meg - mint mondtam - nagyon egyszerű. Sokkal egyszerűbb, mint a VBA, mert ott a "függvénykupacok" INTEGRÁLVA vannak egy MS-fajta Basic-be.

Itt a függvények NINCSENEK EGYETLEN programnyelvbe integrálva, azok "önállóan is életképesek", mert azokat NAGYON SOKFÉLE programnyelvből el tudod, el kell érni Windows alatt is, Linux alatt is, meg a többi támogatott platform alatt is.
El kell tudnod érni azokat úgy az AOO/LO által közvetlenül támogatott programnyelvekből, mint a világban általánosan használt programnyelvekből és fejlesztőrendszerekből is
De a StarBasic IDE a legkézenfekvőbb elérési módja az API függvényeknek (még ha sokan állítják is, hogy nem a leghatékonyabb). Azért a legkézenfekvőbb, mert a Starbasic IDE létezik, működik, és az a leghasonlóbb a VBA könyezethez, még ha a Basic nyelv elavult is mára. A többi támogatott programozási nyelvben "trükköznöd kell", hogy hol is írod meg a kódot, hová is kell tenned azt, hogy fusson, és nem nagyon kapsz részletes hibalistát/jelzést az kódban lévő hibákról.
A külső fejlesztőrendszerek használata esetén meg - természetesen - azokat is JÓL kell ismerni az AOO/LO API függvényeken és eljárásokon túl.
A makrót amit szeretnék, azt írhatom ide, vagy nyissak egy teljesen új témát?
Ami konkrétan ehhez a témához kapcsolódik, azt írhatod ide.
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].
petivuu
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

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

Köszönöm.

A makró lényege valójában, hogy elsősorban feloldja a munkalapot ami jelszóval van védve. Aztán kijelölje az "A21:AC21" - ig a sort és bemásolja a következő üres sorba (minden funkcióval együtt), úgy, hogy közben a "A21" tartalmát megnövelje +1-el. Majd ha újra másolom, akkor "A22"tartalmát növelje meg egyel, és így tovább. Majd zárja le újra a munkalapot jelszóval.

Remélem elég érthetően fogalmaztam, elnézést kérek ha estlegesen nem vagyok elég világos.
OpenOffice 4.1.5 a Windows 10
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

úgy, hogy közben a "A21" tartalmát megnövelje +1-el. Majd ha újra másolom, akkor "A22"tartalmát növelje meg egyel, és így tovább.
Ezt kár a makrókra bízni. Az alábbi képlet továbbmásolva automatikusan növeli a számot:
A képlet a saját sorának a számával tér vissza. Természetesen - ha szükséges - adhatsz hozzá fix eltolásértéket, ha nem pontosan a sor száma kell neked.

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

=ROW()+5
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: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Aztán kijelölje az "A21:AC21" - ig a sort és bemásolja a következő üres sorba (minden funkcióval együtt),
Legközelebb is ezt a tartományt kell átmásolni a soron következő üres sorba, vagy már a legutóbb beillesztettet?
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].
petivuu
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

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

Mindig ez a tartomány van másolva
OpenOffice 4.1.5 a Windows 10
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Akkor ebből a feladatból a legnehezebb rész az utolsó nem üres sor megtalálása.

Ezt kétféleképpen tudod meghatározni:
- vagy írsz egy hasonló eljárást, mint ami a VBA-ban van,
- vagy pedig egyszerűen "kiszámítod", hogy melyik következik.

Utóbbi esetben egy segédcellában képzed a már létező számok maximum értékét a feltölteni kívánt tartomány "A" oszlopában lévő adatokból, és eltolással, vagy anélkül kiszámítod, hogy hányadik sorba akarsz írni.
A céltartomány (és bármilyen más tartományt, vagy cellát) "meg kell fognod" (get), mielőtt műveletet végzel vele. És ez a "megfogási procedúra" igaz minden egyéb objektumra is.
A cellákat pedig megfoghatod a nevük vagy a koordinátáik számértéke alapján.

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

option explicit ' az interpreter ennek az opciónek a bekapcsolásával lesz képes jelezni, a változók névhibái, típushibái esetén.
'Cserébe viszont minden változót deklarálnod kell a dim utasítással.

 dim oDoc as object
 dim oSheet as object

oDoc = ThisComponent ' a dokumentum "megfogása" ThisComponent: az a dokumentum, amiben a makró elindul.
oSheet = oDoc.Sheets.getByName("Objednávka") 'a munkalap "megfogása" a neve szerint.
oSheet.unprotect("rudolf") 'a LAPvédelem felodása.

'...  ide még kell jó néhány parancssor

oSheet.protect("rudolf") 'a lapvédelem aktiválása.

Az eddigi kódrészletben a dim utasításon kívül SEMMI nincs a StarBasic nyelvből. A többi mind API függvény vagy eljárás.
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: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Ha mégis aktiválni akarod a megfogott munkalapot (azaz megjeleníteni, ha nem éppen azon álltál)

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

option explicit

dim oDoc as object
dim oSheet as object
dim oController az object

oDoc = ThisComponent 
oSheet = oDoc.Sheets.getByName("Objednávka")

oController = oDoc.getcurrentController 'a vezérlő "megfogása"
oController.setActiveSheet(oSheet) 'a nézetnek az adott munkalapra történő váltása a vezérlőnek adott utasítással és az átadott objektummal mint paraméterrel

oSheet.unprotect("rudolf")

'...  ide még kell jó néhány parancssor

oSheet.protect("rudolf")
De vedd figyelembe, hogy ezeket a sorokat csak úgy fejből írtam. Nem próbáltam ki. Lehet benne hiba. És nem is próbálom, amíg nem töltesz fel ide egy konkrét, ODF típusú mintafájlt, amin konkrétan ki lehet próbálni.
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].
petivuu
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

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

A 21 sor rejtve van, valamint az R-től az AC oszlopig. A 21-es sort másolja.
Csatolmányok
OpenOffice.ods
Ez volna a táblázatom
(28.46 KiB) Letöltve 270 alkalommal.
OpenOffice 4.1.5 a Windows 10
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

Az alábbi megtisztított és VBA felismerési opcióval ellátott kód remekül fut az én Libreoffice 4.4.7 verziómban minden egyéb "fordítási procedúra" nélkül:

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

REM  *****  BASIC  *****

Option VBAsupport 1


Rem Attribute VBA_ModuleType=VBAModule

Sub Riadok_Click()
 
Rem Application.ScreenUpdating = False

 Dim Objednavka As Worksheet
 Dim Sor As Long

	Set Objednavka = ThisWorkbook.Sheets("Objednávka")
	Sor = Objednavka.Cells(Objednavka.Rows.Count, "A").End(xlUp).Row + 1

	Objednavka.Activate
	ActiveSheet.Unprotect Password:="rudolf"
	Range("A21:AC21").Select
	Selection.Copy
	Objednavka.Activate
	Objednavka.Cells(Sor, 1).Select
	Objednavka.Paste
Rem ActiveCell.Value = Cells(ActiveCell.Row - 1, ActiveCell.Column).Value + 1
Rem Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
	ActiveSheet.Protect Password:="rudolf"

End Sub
Kivettem a kódból az értéknövelést, és azt áthelyeztem képletként az A oszlop cellájába.

Objektumnevekben, változónevekben SOSE használj ékezetes betűt, vagy a különleges karaktereket.

A példafájlod munkalapjának a tartalmát átemeltem egy új, üres ODF sablonba, mert a rengeteg fölösleges VBA modult nem volt időm és kedvem kigyomlálni, és a Modulokból az egyetlen lényegi részt a Standard könyvtár új, Module1 moduljába másoltam. Ezután végeztem el a kódtisztítást. A kódtisztítás után hozzárendeltem a szubrutint a gombhoz (az egérkattintás eseményhez) és máris működött.

Itt van a LO-ban működő, módosított példafájlod is (AOO-ban nem fut - elhasal, megakad az utolsó nem üres sor megállapítására kiadott parancsnál /ahogy azt jósoltam, az a legnehezebb része a feladatnak/ - , mert az AOO nem annyira kompatibilis a VBA-val, de a fentebb már leírt maximumkeresési móddal tovább javíthatod, módosíthatod a program kódodat, illetve újraírhatod "AOO/LO API függvény" alapon):
Objednávka.ods
(28.43 KiB) Letöltve 276 alkalommal.
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].
VDénes
Hozzászólások: 7
Csatlakozott: 2019. január 10., csütörtök 10:18

Re: Excel makró futtatása OpenOfficban

Hozzászólás Szerző: VDénes »

Sziasztok

Hasonló problémám lenne mint az előttem lévőnek.
Mit lehetne tenni?
Sajnos annyira nem értek hozzá mint kellene. Nem indul az excelben működő makró. Próbáltam betenni az Option VBAsupport 1 parancsot, de így sem tetszik az Openoffice-nek.
Esetleg tudna valaki segíteni?
Addig nem töltöm fel a kódsort, ne terheljem a tárhelyet feleslegesen.

Köszönöm szépen a segítséget előre is.
ApacheOpenOffice 4.1.3
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

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

LibreOffice-szal is meg kellene próbálnod. (legalább egy hordozható verziójával.) Egyrészt a LO kompatibilisebb az idegen fájlformátumokkal és a VBA makrókkal is, de természetesen nem létezik 100%-os kompatibilitás egyik esetben sem.

A legcélszerűbb újraírni a makrókat, ha ezután az AOO-ban vagy a LO-ban akarod használni. Nem egyszerű dolog, mert az AOO/LO vezérléséhez az API (Application Programming Interface) függvényeit, eljárásait kell megismerned, amiből sok ezer darab van. Minden programozási objektumnak sokszor tíz tulajdonsága, eljárása, interfésze, stb. van. Ezeket - az önkéntesek által írt - objektum vizsgáló programocskával lehet a makró írása/tesztelése közben megjeleníteni. A nevük MRI, illetve XrayTool, ha kell belinkelem majd (most hirtelen nem tudom, hogy honnan lehet letölteni).
Maga a StarBasic az egy igen egyszerű Basic nyelv és IDE, azt nem nehéz megtanulni. De onnan kell majd meghívogatnod a sok API függvényt, aminek ismerni kell a paraméter átadásokhoz a "lelkivilágát". Az API függvények igen nagy előnye a VBA-val szemben, hogy szinte bármilyen más programozási rendszerből is meghívhatók, nemcsak a beépített nyelvekből. (Nem csak a StarBasic áll a rendelkezésedre az AOO/LO-n belül sem.)

Én a LibreOffice-hoz a StarBasic-ban írt XrayTool-t használom. Meg vagyok vele elégedve.

Nem csak a kódot kellene feltöltened ide, hanem egy(-két) mintafájlt is, amiben látszik, hogy mit is csinál(nak) a makró(k).
A csatolmányok esetében 128 KiB a fájlméret limit itt a fórumon, a kódot a CODE tag segítségével lehet jól olvashatóvá tenni itt a fórum felületén.

De mindenképpen egy ÚJ TÉMÁT nyiss majd a problémának, és oda töltsd fel a csatolmányokat és a kódot.
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