Excel makró futtatása OpenOfficban

Táblázatkezelő

Excel makró futtatása OpenOfficban

HozzászólásSzerző: petivuu » 2018. április 25., szerda 20:20

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   KinyitásÖsszecsukás
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
petivuu
 
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 25., szerda 21:16

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   KinyitásÖsszecsukás
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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 25., szerda 21:24

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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 25., szerda 21:31

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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: petivuu » 2018. április 26., csütörtök 7:00

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
petivuu
 
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 7:30

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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: petivuu » 2018. április 26., csütörtök 8:00

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
petivuu
 
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 8:43

ú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:

Kód: Egész kijelölése   KinyitásÖsszecsukás
=ROW()


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   KinyitásÖsszecsukás
=ROW()+5
Sok sikert!
Kovács Tibor (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 8:46

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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: petivuu » 2018. április 26., csütörtök 8:51

Mindig ez a tartomány van másolva
OpenOffice 4.1.5 a Windows 10
petivuu
 
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 9:40

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   KinyitásÖsszecsukás
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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 10:44

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   KinyitásÖsszecsukás
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 (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: petivuu » 2018. április 26., csütörtök 12:47

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) 9 alkalommal.
OpenOffice 4.1.5 a Windows 10
petivuu
 
Hozzászólások: 5
Csatlakozott: 2018. április 25., szerda 20:08

Re: Excel makró futtatása OpenOfficban

HozzászólásSzerző: Zizi64 » 2018. április 26., csütörtök 16:13

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   KinyitásÖsszecsukás
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) 7 alkalommal.
Sok sikert!
Kovács Tibor (Win7x64Prof; W10x64prof: LO4.4.7, LO5.4.7;
winPenPack, PortableApps: AOO4.1.5, LO3.3.1-6.0.5
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3234
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest


Vissza: Calc

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég

cron