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

Makró készítés, parancsfájl írás és az API használata

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

HozzászólásSzerző: machobymb » 2020. május 8., péntek 12:10

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ásSzerző: machobymb » 2020. május 8., péntek 13:31

Ez nem működik:
Kód: Egész kijelölése   KinyitásÖsszecsukás
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
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ásSzerző: Zizi64 » 2020. május 8., péntek 14:12

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) 15 alkalommal.
Sok sikert!
Kovács Tibor (Win10x64Prof/W7x64P: LO6.1.6-6.2.8;
winPenPack/PortableApps: LO3.3.1-6.4.5, AOO4.1.7
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: 3634
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2020. május 8., péntek 14:22

machobymb írta:Ez nem működik:
Kód: Egész kijelölése   KinyitásÖsszecsukás
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 (Win10x64Prof/W7x64P: LO6.1.6-6.2.8;
winPenPack/PortableApps: LO3.3.1-6.4.5, AOO4.1.7
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: 3634
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2020. május 8., péntek 14:37

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 (Win10x64Prof/W7x64P: LO6.1.6-6.2.8;
winPenPack/PortableApps: LO3.3.1-6.4.5, AOO4.1.7
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: 3634
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2020. május 8., péntek 17:24

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 (Win10x64Prof/W7x64P: LO6.1.6-6.2.8;
winPenPack/PortableApps: LO3.3.1-6.4.5, AOO4.1.7
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: 3634
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2020. május 8., péntek 23:55

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 ... ion(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 (Win10x64Prof/W7x64P: LO6.1.6-6.2.8;
winPenPack/PortableApps: LO3.3.1-6.4.5, AOO4.1.7
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: 3634
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest


Vissza: Testreszabás és kibővítés

Ki van itt

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