[Megoldva] Állandó értékre hivatkozó makró

Táblázatkezelő
Avatar
Harsányi Zoltán
Önkéntesek
Hozzászólások: 42
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron

[Megoldva] Állandó értékre hivatkozó makró

Hozzászólás Szerző: Harsányi Zoltán »

Sziasztok!

A Vickers keménység számító táblázatomat bővítenem kellett, mert objektív cserére került sor a berendezésen. A két objektív közti különbséget kompenzálni kell, ezért a lenyomat értékeket szorozni kell egy állandóval.
Nos a "makrórekorderrel" rögzítettem egy makrót. Készítettem egy nyomógombot a használatához. A fájl megnyitása és adat feltöltés után általában nem végzi el a makrófuttatást. Viszont, ha előre kijelölöm és vágólapra másolom az állandó értékét; akkor rendben működik.
Örülnék, ha segítenétek a makró javításában; akár a makróban fixen beírt állandó is jó lenne (sőt ezzel kiküszöbölhető lenne a hivatkozott cella módosításából adódó hiba lehetőség)!

Üdvözlettel: Harsányi Zoltán
Csatolmányok
HV keménységmérés.ods
(126.7 KiB) Letöltve 234 alkalommal.
A hozzászólást 1 alkalommal szerkesztették, utoljára Harsányi Zoltán 2018. augusztus 15., szerda 17:16-kor.
LinuxMint 21.2 (home) • Ms Windows 7 (work) • LibO 7.6.x
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4034
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Állandó értékre hivatkozó makró

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

Nem tartom jó ötletnek a kompenzálásnak az ilyen módon történő elvégzését. Hiszen így akár többször is megnyomhatod a gombot...

Ettől az is jobb, ha egy névvel rendelkező cellába helyezed a szorzót és minden szükséges helyre beírod szorzótényezőként. A név csak a valódi "abszolút hivatkozás" miatt előnyös: bárhová, bármelyik sheet-re is helyezed át a névvel rendelkező cellát, a képletek érvényesek maradnak. Ha később a szorzó ismét változik, azt abban az egyetlen cellában kell csak módosítanod. Ha több munkafüzetben is szükséged van ugyanarra a szorzóra, akkor pedig írj egy roppant egyszerű függvényt a szorzó eltárolására:

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

Function MyComp()
   MyComp = 1,23456789
end function
A makró függvényt mentsd egy Modulba a program Standard könyvtárába, akkor az minden táblázatból elérhetővé válik (de csak a te gépeden). Ha a fájlokba is beleteszed, akkor hordozhatóvá is válik. Nem baj, ha egyszerre két helyről is elérhető a függvény: a program Standard könyvtár egy Moduljából is, és az aktuális dokumentumból is. (Egy másik dokumentumból nem elérhetők a makrók, legalábbis nem elérhetők ilyen egyszerűen.)

használata:
= A1*B1*MyComp()
a PI() függvényhez hasonló módon.

A te makrós megoldásod esetén biztosítani kell, hogy csakis egyszer történhessen meg a kompenzálás, és a visszavonási (reset) lehetőséget is biztosítani kell - főleg, ha a későbbiekben a szorzó változhat.
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
Harsányi Zoltán
Önkéntesek
Hozzászólások: 42
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron

Re: Állandó értékre hivatkozó makró

Hozzászólás Szerző: Harsányi Zoltán »

Szia Zizi!

Köszönöm szépen a válaszokat.
Igen, sajnos a gomb lenyomásával többszöri kompenzálás keletkezik, ezt tapasztaltam én is. Nem tudom megoldható, hogy a makrót csak egyszer lehessen lefuttatni (gombot lenyomni); a fájl megnyitása után? A következő futtatás csak a fájl újra nyitása után lehetne? Esetleg a makró végére beszúrni sorokat, hogy a kompenzálás alapjául szolgáló E7 cellába 1,0 értéket írna. Így másodjára már az 1,0 értékkel szorozna, ami megfelelne számomra.
Az E7 cella tartalmának figyelését a HA() függvénnyel megoldanám, azaz visszajelzést kapna a felhasználó; indítható-e a kompenzálás vagy nem. Az E7 cellára pedig érvényesítést raknák, hogy csak az 1,0 vagy az 1,2 érték bevitelét engedje.
Sajnos a fájt egy hálózati mappából 3 személynek kell elérnie, ezért is a fájlba írt makróra van szükség.

Üdvözlettel: Harsányi Zoltán
LinuxMint 21.2 (home) • Ms Windows 7 (work) • LibO 7.6.x
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4034
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Állandó értékre hivatkozó makró

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

Nem tudom megoldható, hogy a makrót csak egyszer lehessen lefuttatni (gombot lenyomni); a fájl megnyitása után? A következő futtatás csak a fájl újra nyitása után lehetne? Esetleg a makró végére beszúrni sorokat, hogy a kompenzálás alapjául szolgáló E7 cellába 1,0 értéket írna. Így másodjára már az 1,0 értékkel szorozna, ami megfelelne számomra.
Az E7 cella tartalmának figyelését a HA() függvénnyel megoldanám, azaz visszajelzést kapna a felhasználó; indítható-e a kompenzálás vagy nem. Az E7 cellára pedig érvényesítést raknák, hogy csak az 1,0 vagy az 1,2 érték bevitelét engedje.
Ez mind-mind a "túlbonyolítás" kategóriába tartozik nálam. Egyetlen névvel rendelkező cella, vagy egy a szorzó konstanst visszaadó függvény, és a korrigáló szorzást is tartalmazó képletek sokkal egyértelműbb, és egyszerűbben használható megoldást adnak. Ha kézzel bevitt adatokat kell korrigálnod, akkor is alkalmazhatók segédcellák, ahol a szorzás megtörténik, és azoknak az eredményeit viszed tovább. Nem árt az, ha egy szükséges korrekció elvégzésének ténye LÁTSZIK a dokumentumban.
Ha mégsem kell a korrekció, akkor egyszerűen 1-et írsz a névvel rendelkező cellába, vagy a makrókódba.
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: Állandó értékre hivatkozó makró

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

További magyarázat:
Ha képlet nélkül makróval szorzol fel egy számot egy cellában (kiemelve a számot onnan, majd a makróval a szorzást elvégezve visszateszed az eredményt a cellába), akkor a cellában SEMMI nyoma nem lesz annak, hogy a szorzást elvégezted-e már, vagy még nem.
A makrónak kell számontartani (globális változókkal, vagy további segédcellák alkalmazásával), hogy a hálózaton többek által kezelt fájlban ne történhessen többszörös korrekció. Ez nagyon nehezen fog megbízhatóan működni.
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: Állandó értékre hivatkozó makró

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

Nem tudom megoldható, hogy a makrót csak egyszer lehessen lefuttatni (gombot lenyomni); a fájl megnyitása után? A következő futtatás csak a fájl újra nyitása után lehetne?
...és mi történik ha elmented a fájl és aztán megint megnyitod? kétszer fog megtörténni a korrekció, ha a gombra megint lehet kattintani... Vagy egy Template/Sablon fájlról beszélünk (a kiterjesztését illetően is), ami mindig egy új dokumentumként nyílik meg és (könnyen) nem menthető vissza az eredeti helyére?

Ha mindenképpen a komplex makrós megoldásban gondolkodsz:

Lehet természetesen LETILTANI egy gombot akár a megnyomásához rendelt makróval is. (És mellette a makró elvégezheti egyszer a szükséges számításokat. Utána már nem tudod megnyomni.)
Arra találsz mintapéldákat a Fórumokon, hogy az adott munkalap grafikus rétegén (Layer) elhelyezkedő gombokat hogyan találhatod meg makróval a NEVÜK, vagy a FELIRATUK alapján.
https://stackoverflow.com/questions/588 ... eet-macros
https://forum.openoffice.org/en/forum/v ... =9&t=30737

Vagy hivatkozhatsz a gombra a makró futását kiváltó esemény szülő-objektumaként is:
https://forum.openoffice.org/en/forum/v ... 39&t=38725
Azután már csak be kell állítanod a megfelelő tulajdonságait a megfelelő értékre (Enabled/Disabled).

De ez semmiképpen nem megy makrórögzítővel rögzített makrókkal. ÍRNOD kell a makrókat az API függvények használatával. Az effektív makró programozáshoz mindenképpen bele kell mélyedned az AOO/LO "API" felületének a megismerésébe és használatába. (API = Application Programming Interface)


Andrew Pitonyak ingyenes makróprogramozási könyvei ehhez rengeteg segítséget adnak:
http://www.pitonyak.org/oo.php

Arról, hogy egy megtalált objektum milyen tulajdonságokkal, metódusokkal, szolgáltatásokkal rendelkezik, objektum-vizsgáló eszközök adhatnak információt. Ilyenek pl. az MRI és az XrayTool:
https://forum.openoffice.org/en/forum/v ... 74&t=49294
https://forum.openoffice.org/en/forum/v ... 20&t=54217
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
Harsányi Zoltán
Önkéntesek
Hozzászólások: 42
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron

Re: [Megoldva] Állandó értékre hivatkozó makró

Hozzászólás Szerző: Harsányi Zoltán »

Szia Zizi!
A nyári leállás után folytattam a táblázat átalakítását. Makró maradt, de a nyomógombot töröltem; ezzel a véletlen újra számítás elkerültem. Végül sikerült azt is elérnem, hogy újra számítás esetén 1-es értékkel történjen a szorzás.
A táblázat első lapja csak a számítás elvégzéséig kerül használatra, miután PDF készült róla a beviteli mezőket ürítjük.
Üdv. Zoli
Csatolmányok
HV keménységmérés német2.ods
(95.14 KiB) Letöltve 251 alkalommal.
LinuxMint 21.2 (home) • Ms Windows 7 (work) • LibO 7.6.x
Válasz küldése