Olyan makró írása, mely felismeri, honnan fut

Makró készítés, parancsfájl írás és az API használata
machobymb
Hozzászólások: 21
Csatlakozott: 2012. május 30., szerda 12:48

Olyan makró írása, mely felismeri, honnan fut

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

Sziasztok!

Van egy régi munkafüzetem, amiben át szeretném írni a makrót úgy, hogy fusson Calc és Excel alatt is. Van-e arra lehetőség, hogy ha megírom a BASIC alatti változatát, és nem akarom átírni a VBA-t kompatibilisen, akkor valahogy leellenőrizzem, hogy mely alkalmazás futtatja a kódot?
Libre alatt preferálnám a saját BASIC nyelvét, de ha Excel-ben nyitom meg, akkor hagyja figyelmen kívül a Libre kódját.

Üdv: Laci
LibreOffice 6.1.0 - Debian testing
LibreOffice 6.1.0 - Windows 7 / Windows 8.1 / Windows 10
machobymb
Hozzászólások: 21
Csatlakozott: 2012. május 30., szerda 12:48

Re: Olyan makró írása, mely felismeri, honnan fut

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

Ez nem működik:

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

Option VBASupport 1
Option Compatible

Sub Main
 MsgBox(Application.Name)
End Sub
LibreOffice 6.1.0 - Debian testing
LibreOffice 6.1.0 - Windows 7 / Windows 8.1 / 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: Olyan makró írása, mely felismeri, honnan fut

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

Mintafájl - a beágyazott makrókódoddal együtt - mindenképpen kéne, hogy lássam, miről is van szó.

Gyanús, hogy ez a kettős használat - főleg ha ez a dokumentum mentésével is jár - mindkét fajta alkalmazás alatt vagy eleve működésképtelen lesz (mert valamelyik meg fogja tagadni a másik makrókódjának mentését), vagy gyorsan tragikus hibához vezet.
Nyilván függ ez attól is, hogy milyen jellegű makrót írtál és futtatsz: egyszerű matematikai számolásokat, vagy a munkafüzet API-n/VBA-n keresztüli vezérlését.

A környezeti változókat elvileg nem lehetetlen megállapítani a LibreOffice-on belül, de hogy erre a makródnak egy KÖZÖS ága hogyan lesz képes mindkét fajta office alkalmazásban...?! Mert a többi dolgot elvileg elkülönítheted két szeparált részbe (Modulba, vagy Könyvtárba), de ezt nem!

Itt van egy mintapélda, hogy hogyan kérhetsz be környezeti változókat a StarBasic-ből az Environ függvény és LO/AOO Tools könyvtára segítségével. A LibreOffice verziója az utóbbival kérhető be.

De hogy ez nem fog futni Excel alatt, abban biztos vagyok. Kipróbálni csak Apache OpenOffice-szal és LibreOffice-szal tudtam, azokkal szépen működik. Excel-em majd' két évtized óta nincs. MS Office 2002 volt az utolsó verzió, amit használtam, és igazából csak matematikai számításokat végző függvényeket írtam Excel alá, a programot vezérelni sohasem akartam, mert mire szükségem lett volna rá, áttértünk az OpenOffice-ra, majd a LibreOffice-ra.
Environment.ods
(14.17 KiB) Letöltve 274 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].
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Olyan makró írása, mely felismeri, honnan fut

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

machobymb írta:Ez nem működik:

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

Option VBASupport 1
Option Compatible

Sub Main
 MsgBox(Application.Name)
End Sub
Nálam működik (azaz: fut - megakadás, hibaüzenet nélkül), de azt írja ki, hogy "Microfost Excel".

Ha XrayTool-lal megvizsgálom az Application "objektumot", az egy nagy üres, semmit nem tartalmazó "objektum". Az Application.Name pedig csak egy string "Microfost Office" tartalommal. Azaz: az egész Application.Name nem egy objektum hanem csak egy függvény, konstans string kimenettel - legalábbis itt a LO/AOO-ban.

Mondom még egyszer: Reménytelen, de legalábbis nagyon veszélyes (ADATVESZTÉS!), amit próbálsz megvalósítani.
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: Olyan makró írása, mely felismeri, honnan fut

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

Még ezek közül is hozzá tudsz adni néhányat a példa-függvényemhez:

https://wiki.documentfoundation.org/Dev ... _variables

Például ez működik:
get_Environment("LANGUAGE") = en_GB.UTF-8
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: Olyan makró írása, mely felismeri, honnan fut

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

Egyetlen élhető megoldás jut csak az eszembe:

Ne akard mindenáron a dokumentumba beletuszkolni a makrót. Tárold azt az applikáció megfelelő helyén. Így megírhatod Excel és LO szabályok szerint külön-külön ugyanazt a makrót, ugyanazon a néven. Ha ezek cellafüggvények, akkor elvileg működniük kell, de ha eseményhez rendelt szubrutinok, akkor megint csak baj van. A hozzárendelés (egy gomb megnyomásához például) is különböző lehet a kétféle alkalmazásban (merthogy a makrók helye is különbözik).

Na, ezért kellene a makrókódod, hogy lássam: miféle makrókat akarsz két rendszer alatt futtatni.
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: Olyan makró írása, mely felismeri, honnan fut

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

Ha mindenáron próbálkozni akarsz, keress a VBA-ban megírható, de a LibreOffice-ban is futó függvények között olyat, amivel meg lehet különböztetni a két alkalmazást egymástól. Lehet ez a függvény visszatérési értékeinek vizsgálatával, vagy a hiányával (hibaüzenet) is detektálni.

MsgBox(Application.Caption) - A LO-ban ez írható-olvasható érték, ha az egyik alkalmazásban használtad a fájlodat, beállíthatod a rá jellemző értékre egy másik makróval. De sajnos nem mentődik el ODF fájlba a beállított értéke.
MsgBox(Application.Name) - Ez MS kompatibilis értéket ad vissza, azaz "becsap" téged, mert MS terméknek mutatja magát az AOO/ LO. De azért érdemes összehasonlítani a visszaadott értéket azzal, amit egy valódi Excel ad vissza.)
MsgBox(Application.Version) - Ez MS kompatibilis értéket ad vissza, azaz "becsap" téged, mert MS terméknek mutatja magát)
MsgBox(Application.Build) - ez nem ad vissza értéket a LO-ban. Ha Excelben ad vissza valami értéket, máris van egy megkülönböztető markered.

Az Excelben elérhető Application tulajdonságok listája:
https://docs.microsoft.com/en-us/office ... on(object)

Sajnos az utolsó zárójel kimarad valamiért az URL-ből, úgyhogy a megjelenő hibaoldalon kattints a megfelelő felkínált lehetőségre. (Ilyen hülye is csak a MS lehet, hogy zárójelet használ egy URL-ben...)
Vagy pótold kézzel a zárójelet a böngésződ címsorában.


nagy valószínűséggel nincs mind megvalósítva LO-ban, és ami meg van valósítva, azok közül is sok is fals (azaz: "Excel kompatibilis") értéket adhat vissza.

AOO-ban már a MsgBox(Application.Caption) is hibaüzenetet ad: ezzel már meg tudod különböztetni az AOO-t a LO-tól.
Nyilván az nem jó, hogy a program futása megakad egy ilyen hibaüzenetnél, de azt le lehet kezelni a "try..." utasítással (Az egy olyan elágazás, mint az "if...", csak a hibára ágazik el. Neked kell megadnod, hogy mi történjen, ha egy utasítás hibával tér vissza.)
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