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

Táblázatkezelő

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

HozzászólásSzerző: Harsányi Zoltán » 2018. július 19., csütörtök 13:16

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) 20 alkalommal.
A hozzászólást 1 alkalommal szerkesztették, utoljára Harsányi Zoltán 2018. augusztus 15., szerda 17:16-kor.
LinuxMint 19.0 (home) • Ms Windows 7 (work) • LibO 6.0.x
Avatar
Harsányi Zoltán
Önkéntesek
 
Hozzászólások: 34
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron

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

HozzászólásSzerző: Zizi64 » 2018. július 19., csütörtök 15:54

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   KinyitásÖsszecsukás
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 (Win7x64Prof/W10x64prof: LO4.4.7, LO6.1.6;
winPenPack/PortableApps: AOO4.1.5, LO3.3.1-6.2.4
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: 3411
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Harsányi Zoltán » 2018. július 20., péntek 9:33

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 19.0 (home) • Ms Windows 7 (work) • LibO 6.0.x
Avatar
Harsányi Zoltán
Önkéntesek
 
Hozzászólások: 34
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron

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

HozzászólásSzerző: Zizi64 » 2018. július 20., péntek 12:51

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 (Win7x64Prof/W10x64prof: LO4.4.7, LO6.1.6;
winPenPack/PortableApps: AOO4.1.5, LO3.3.1-6.2.4
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: 3411
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2018. július 20., péntek 14:00

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 (Win7x64Prof/W10x64prof: LO4.4.7, LO6.1.6;
winPenPack/PortableApps: AOO4.1.5, LO3.3.1-6.2.4
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: 3411
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Zizi64 » 2018. július 21., szombat 7:37

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 (Win7x64Prof/W10x64prof: LO4.4.7, LO6.1.6;
winPenPack/PortableApps: AOO4.1.5, LO3.3.1-6.2.4
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: 3411
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

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

HozzászólásSzerző: Harsányi Zoltán » 2018. augusztus 15., szerda 17:30

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) 20 alkalommal.
LinuxMint 19.0 (home) • Ms Windows 7 (work) • LibO 6.0.x
Avatar
Harsányi Zoltán
Önkéntesek
 
Hozzászólások: 34
Csatlakozott: 2008. február 29., péntek 21:35
Tartózkodási hely: Sopron


Vissza: Calc

Ki van itt

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

cron