Office Guru

Dátumválasztási lehetőség beszúrása Excel legördülő menübe

2016. február 06. - Office Guru

Aki csinált már feladat- vagy akár ötletlistát Excelben, abban biztos felmerült már olyan igény, hogy egyes cellák/oszlopok tartalmát ne kézzel kelljen a felhasználóknak kitölteni, hanem mondjuk legördülő menükből választható legyen az adott feladat fontossága vagy éppen választható legyen mondjuk a dátum is, ne kézzel kelljen gépelgetni.

Az Office táblázatkezelője erre is kínál beépített megoldást, ami ugyan önmagában még nem teljesen tudja azt, amit szeretnénk, de a következő kis posztban bemutatok egy verziót arra, hogy lehet ezt szépen működésre bírni.

Több módon és formában is megvalósítható a dolog és mivel előfordulhat, hogy bizonyos ActiveX-vezérlők nem érhetőek el mindenki gépén, ezért maradjunk egy default verziónál, amelynek mintájára bármilyen vezérlővel meg tudjuk ezt csinálni.

Első lépésként a Ribbonunk Developer füle alatt a Controls szekcióban található Insert parancs segítségével szúrjunk be egy ActiveX-vezérlőt a munkalapunkra, méghozzá a More Controls apró ikonja alatt található listából egy olyat, ami naptár- vagy éppen idővezérlőként funkcionál.

1000.jpgHa valakinek a listában ott van a Microsoft Date and Time Picker Control, akkor használja azt, hiszen az a legjobb erre a célra, de a tapasztalatom azt mutatja, hogy ez a vezérlő nem elérhető mindenki számára (a Microsoft oldaláról letölthető egyébként a kapcsolódó OCX), ezért maradjunk egy olyannál, ami biztosan használható bárki számára, így én most a poszt első részéhez a Calendar Controlt választom.

1001.jpgSzúrjuk be, formázgassuk, méretezgessük, én maradok egy egyszerű verziónál most:

1002.jpgAhogy látható, van egy naptárunk, amiből választhatunk, illetve van egy mezőnk, ahová majd a naptárból kiválasztott dátumot töltjük későbbi felhasználás céljából.

Innen már csak két lépésünk van hátra, először a Ribbonunk Developer füle alatt lévő Controls szekcióban található Design Mode-ot be kell kapcsolnunk, majd a naptárunkra jobb gombbal kattintva elérhető válik a Properties menüpont.

1003.jpgItt pedig már csak annyit kell tennünk, hogy a Linked Cell utasítás segítségével a vezérlőnket összekötjük a dátumhoz kitalált kis cellánkkal:

1004.jpgÉs működik is, úgy ahogy szerettük volna.

1005.jpgEz a felvázolt verzió nem fog működni egy listában önmagában, egyrészt mérete szerint sem, másrészt pedig egy cellát tudunk csak linkelni, de a koncepció szerintem követhető volt - viszont a fentebb már említett Microsoft Date and Time Picker controlja pontosan olyan, amit egy cellába tudunk legördülő mezőként beszúrni és onnantól kezdve tökéletesen alkalmazható listás célra a fentebb felvázolt módszerrel.

1006.jpgEgyszerűen válasszuk ki a Date and Time Picker Controlt, majd a beszúrt és megfelelően formázott kis legördülő menünkhöz ugyanúgy hozzá kell rendelni a megfelelő cellát, ahogy az előbb a Calendar controlnál már mutattam:

1007.jpg

1008.jpg

 

Ha esetleg valaki szeretné ezt a vezérlőt feltelepíteni, az is roppant egyszerű:

1. Töltsük le a Microsoft oldaláról az mscomct2.ocx-et

2. Másoljuk be a C:\Windows\SysWoW64 könyvtárunkba (64-bites Windowsunk esetén)

3. Majd a Commant promptból futtassuk le a regsvr32.exe mscomct2.ocx parancsot

Két apró, ám idegesítő Outlook-probléma megoldása

Úgy tűnik, hogy ezekben a napokban a tervezett témáimat kicsit félre kell tennem, ugyanis ismét egy olvasói kérdést fogok megválaszolni a mai posztban, ezúttal azonban elszakadunk kicsit az Exceltől és átnyergelünk egy másik Office-modulra, az Outlookra. A mai kérdés összességében nem probléma, hanem igény, hiszen a kedves érdeklődő azt szeretné elérni levelező programjában, hogy az olvasatlan levelek jobban elkülönüljenek a már olvasottá tett levelektől.

A lehetőségek tárháza elég széles a témakörben, csak meg kell találni az utat, ami az Outlook Ribbonunk View fülén kezdődik, ezen belül kell a Current View szekcióban kell a View Settingsre kattintanunk:

001.bmpItt rengeteg beállítási lehetőségünk van postafiókunk kinézetét illetően, itt tudunk beállítani szűréseket, itt tudunk oszlopokat hozzáadni vagy eltávolítani és igen, a Conditional Formatting menü alatt bizonyos típusú leveleket bizonyos feltételek esetén úgy formáz nekünk, ahogy szeretnénk:

002.bmpÉs igen, itt tudjuk beállítani azt is, hogy olvasatlan üzeneteink, hogy nézzenek ki, milyen formátumban jelenjenek meg, de itt egyéb típusú leveleinknek is extrább kinézetet tudunk kölcsönözni, ha akarunk.

Hogy maradjunk még Outlook problémák/igények megoldásánál, egy másik zavaró kis probléma az lehet, amikor egy bizonyos Windows update után (több ilyen Outlook-frissítés is van) a beérkezett leveleink tárgya alatti első mondat színe a megszokott szürke helyett kékre vált.

Ennek megoldására több opció is elképzelhető, a Ribbonunk View füle alatt található Current View szekcióból lefuttathatjuk a Reset View parancsot, csak ez a színek mellett minden más beállításunkat is visszadobja defaultra.

Egy másik megoldás lehet, ha az update által a Compact nézetre változtatott jelenlegi nézetünket visszatesszük Preview típusra:

003.bmpMegint egy másik megoldás az lehet, ha a fentebb beszúrt printscreenen is látható View Settings menüből az Other Settings almenüt választjuk, majd itt a Message Preview szekcióban szimplán csak a Font színét kell átállítanunk.

Aztán ezt a változtatást a Ribbonunk View füle alatt található Change View parancsból előhívható Apply Current View to Other Mail Folders utasítással más foldereinkre is be tudjuk állítani.

Elképzelhető, hogy sokak számára ez a két kis magyarázat nevetségesnek hat, de ettől független remélem, hogy lesz, akinek segíthettem.

Átlagot mutató vonal 1 perc alatt Exceles grafikonba

A mai posztban ismételten csak olvasói kérdéssel folytatnám, ami alapvetően egyszerűnek tűnő kérdés, de azért valószínűleg egy rövid ideig mindenki elgondolkodik rajta, hiszen talán nem annyira gyakran felmerülő problémáról van szó. A megoldás, amit felvázolok, elképzelhető, hogy nem a legjobb, de mindenképpen a legegyszerűbb és Excelben minden esetben a legegyszerűbb út felé kell igyekeznünk, hiába mutatna mondjuk szépen egy VBA-val megbolondított munkalap.

Szóval a kérdés az lenne, hogy hogyan tudunk egyszerű diagramunkra egy átlagot mutató vonalat varázsolni, amely megmutatja értékeink átlagos értékét?

Adott a következő kis táblázat, amely az egy hónapban megoldott problémás kérdések számát jelentené:

990.jpgElső lépésként a Ribbonunk Insert fülének Charts szekciója alól szúrjunk be mondjuk egy egyszerű vonalas pontdiagramot:

991.jpgKicsit formázzuk meg a tengelyeink értékeit, távolítsuk el például a segédvonalakat, de tényleg mindenkinek a saját képzeletére van bízva, hogyan tupírozza fel a kis grafikonját:

992.jpgEzután én szimplán beszúrtam egy oszlopot a táblázatunk mögé, Átlag címszóval és ebben az oszlopban minden cellába az AVERAGE függvény felhasználásával értékeink átlagát fogom beírni:

993.jpgHa ezzel megvagyunk, akkor jelöljük ki a diagramunkat egy egyszerű belekattintás segítségével:

994.jpgLépjünk a Ribbonunkon megjelent Chart Tools fülek közül a Design alatt található Data szekcióba, ahonnan a Select Data paranccsal hívjuk elő az ábránk alapadatait megmutató kis ablakot:

995.jpgÉs itt a Chart data range mező alatt bővítsük ki diagramunk adatterületét a pluszban hozzáadott Átlag oszloppal is:

996.jpgNincs más hátra, mint a legtöbb diagram lelkének számító formázgatás, én például a mostani esetben eltávolítottam a markereket a vonalamról, megvastagítottam, kicsit módosítottam a címen, de bármit megtehetünk, amiről úgy gondoljuk, hogy a jobb eladhatóságban a segítségünkre lehet.

997.jpg

Újabb bizonyíték: VLOOKUP-nál is jobb barátunk lehet az INDEX-MATCH párosa

A mai poszt témája egy olvasói kérdés, amely egy igencsak mindennapos Excel-problémát jár körbe, egy olyat, amelynek eléréséhez valószínűleg mindenkinek megvan a saját kis megoldási módszere, most egy ilyen megoldást fogok bemutatni - nem biztos, hogy a legegyszerűbb, de a lényegi célkitűzést teljesíti, azaz egy lépésben megadja a szükséges választ.

Szóval adott a következő kis táblázat, alatta olvasható is a kérdés, amelynek a megoldását keressük: azaz melyik város eladásai produkálták a legnagyobb változást 2014 és 2015 között?

980.jpgMost tekintsünk el azoktól az egyszerű, többlépcsős megoldásoktól, mint hogy végzünk egy kivonást, maximalizáljuk a különbséget és bekeressük a hozzá tartozó városnevet, hiszen értelemszerűen a leggyorsabb utat keressük (hangsúlyozom, a most taglalt megoldási javaslatnál is lehet egyszerűbb út).

Az biztos, hogy a függvényünk egy tömbfüggvény kell, hogy legyen, tekintve, hogy egy tömbből szeretnénk egyetlen választ megkeresni, másrészt az is valószínű, hogy szükségünk lesz MAX, ABS, INDEX és MATCH függvényekre is, hiszen

MAX megadja a paramétereiként megadott számok közül a legnagyobbat
ABS megadja a paramétereként megadott szám abszolút értékét
INDEX egy megadott tömbben megadja a megadott sor és oszlop találkozásánál lévő értéket
MATCH az első paramétereként megadott érték helyzetét fogja a második paramétereként megadott tartományból megadni nekünk (a harmadik paraméter a pontos egyezés, kisebb-nagyobb feltétel megadására ad lehetőséget), így értelemszerűen a

=MATCH(D20,F19:F23,0)

meg fogja mondani, hogy a D20-as cella értéke az F19:F23 tartományban hol található pontos egyezés esetén.

Most mindenkinek azt javasolnám, hogy a fentebb taglalt függvények segítségével először próbálja saját maga kitalálni a megoldást, persze közben én itt folytatom azért a megoldáshoz vezető út bemutatását.

Először próbáljuk meghatározni szimplán a különbségeket abszolút értékben, végig figyelve arra, hogy itt CTRL+SHIFT+ENTER segítségével alkalmazható tömbfüggvényről van szó:

{=ABS(E4:E11-D4:D11)}

981.jpgKövetkező lépésben kell megkeresnünk, hogy ebben az új tömbben, melyik a legnagyobb érték, itt kell majd a MAX függvényt használnunk:

{=MAX(ABS(E4:E11-D4:D11))}

982.jpgEzután ha visszagondolunk a fentebb leírt MATCH definícióra, akkor láthatjuk, hogy a következő lépésünk az lesz, hogy a MATCH segítségével meghatározzuk a maximum értékünk helyzetét az abszolútérték-különbségeink tömbjében:

{=MATCH(MAX(ABS(E4:E11-D4:D11)),ABS(D4:D11-E4:E11),0)}

Ez vissza fogja adni nekünk annak a sornak a számát, amelyben az abszolútérték-különbségeink tömbjében a legnagyobb érték található.

983.jpgInnen pedig már csak egy INDEX formulára lesz szükségünk, hiszen ezzel az eredeti tömbünk városnév oszlopából kell visszakapnunk az előbbi tömbfüggvénnyel meghatározott sorszám szerinti értéket, azaz:

{=INDEX(C4:C11,MATCH(MAX(ABS(E4:E11-D4:D11)),ABS(D4:D11-E4:E11),0))}

984.jpgÉs láthatjuk is, mi a megoldásunk. Bárkinek van más ötlete, javaslata, VBA-kódja a témában, szívesen látom!

Az Excel szummázás megbolondulni látszik, ha logikai értékekről van szó

What is happening here?

A mai napi posztban továbbra is maradunk az Excelnél (mint a leggyakrabban használt Office-családtag, ez nem is meglepő), de ezúttal is maradunk az érdekességek vonalán, logikai értékek (Boolean - True vagy False) összegzésének furcsaságait fogom fejtegetni a következőkben, remélve, hogy bár Excelről beszélünk, tudok egy-két vidám percet okozni a kíváncsiskodóknak.

Adott a következő három logikai érték, három különböző cellában (beírhatjuk egyszerűen őket, de akár kalkulált értékek is lehetnek, mindegy jelen esetben):

910.jpgMi történik, ha szimplán =A1+A2+A3-ként összegezzük?

911.jpgNem kérdés, az eredmény kettő lesz, hiszen két TRUE és egy FALSE értékünk van.

Bonyolítsuk meg egy kicsit, mi történik, ha most a SUM függvényt használjuk, azaz =SUM(A1:A3) képlettel próbáljuk meghatározni a három logikai értékünk összegét?

912.jpgBár nem erre számítanánk, defíníció szerint nem kétséges, hogy az eredményünk nulla lesz, hiszen a SUM függvény leírása szerint, ha tömböt összegzünk, csak a számok vagy az arra való hivatkozások kerülnek összesítésre, a logikai értékek, szövegek, hibaüzenetek természetesen nem.

Viszont a defíníció másik részéből az is kiderül, hogy a SUM függvény mégiscsak alkalmas lehet a példánkban szereplő két TRUE és egy FALSE megfelelő összegzésére, csak ehhez a =SUM(A1:A3) helyett a =SUM(TRUE,TRUE,FALSE) képletet kell alkalmaznunk. Gyorsan belátható, hogy nagyobb méretű tömbök, tartományok esetén ez a megoldás nem igazán használható, ezért logikai értékek összegzésénél a SUM nem megfelelő megoldás. Használjunk inkább SUMPRODUCT vagy COUNTIF függvényeket.

913.jpgNa de mi történik, ha VBA-ban próbáljuk összehozni az eredményt? Menjünk át a VBA-editorba és szúrjunk be egy új modult - ebben fogunk gyorsan egy szumma funkciót definiálni.

914.jpgMost tehát nem szubrutinról van szó, hanem funkcióról szó, ezt ne feledjük. Definiálunk tehát egy funkciót (legyen a neve SAJATSZUMMA), amelynek paramétere a tartomány lesz, amit összegezni szeretnénk:

915.jpgMielőtt továbbolvasna bárki is, azt javaslom a VBA-ban kevésbé járatos Olvasóknak, hogy próbálkozzanak meg ezzel saját maguk, hiszen alapvetően nem komplikált kódról van szó. Szóval szükségünk lesz egy cell névre hallgató változóra, amit Range típussal definiálunk, hiszen tartományokat fogunk összegezni, illetve még arra is szükségünk lesz első lépésként, hogy SAJATSZUMMA funkciónk/formulánk kezdőértékét nullára állítsuk:

916.jpgEzután már csak egy For..Next ciklusra van szükségünk, ahol meghatározzuk, hogy minden egyes cella esetében a paraméterként megadott tartományunkban hajtsa végre az adatok összegzését, valahogy így:

917.jpgSAJATSZUMMA funkciónk eredménye tehát nulláról indul, majd ehhez hozzáadja tartományunk első cellájának értékét, majd ahhoz a következőt és így tovább, tehát alapból ez egy jól működő funkció lesz.

Nézzük azonban meg mi történik, ha használni is fogjuk a fenti példa esetében:

918.jpgAz eredmény mínusz kettő lett! A Microsoft leírása azért nagyjából megmagyarázza ezt a furcsaságot is, elsőként persze hangsúlyozva, hogy Boolean értékeket nem igazán célszerű számként használni/összegezni. A lényeg viszont az, hogy alapesetben ha nem konvertálja az ember ezeket az értékeket, akkor a False 0, a True pedig -1 értékkel kerül majd összegzésre.

Érdekességek az Excel alapvetően haszontalannak gondolt funkcióinak világából

Alapvetően az Excelt mindannyian ismerjük és használjuk bizonyos szinten, valaki minden nap, valaki csak időnként, valaki magyarul, valaki angolul és még folytathatnánk ezt a felsorolást, de a lényeg, hogy a funkciók egy részét ismerjük, többé-kevésbé használjuk is, de hogy milyen egyéb funkciók vannak még a táblázatkezelőben, illetve egyes funkciók miért is vannak benne, azzal nem nagyon szoktunk foglalkozni - get the job done és go home. Ebben a posztban most azon fogok kicsit gondolkodni, hogy egyes funkciókra egyáltalán mi szükség volt az Excelben és nem azért, mert amit tudnak azok felesleges dolgok lennének, hanem egyszerűen nehéz elképzelni, hogy milyen piacra, milyen céllal kerültek kiválasztásra a modulba.

Az örök példa, amit ebben a témában egy beszélgetés során fel szoktam hozni, a BAHTTEXT formula, ami nem mást tesz, mint a paramétereként megadott számot thai szöveggé alakítja, hozzáadva a baht jelet, ami konkrétan a thaiföldi pénznem. Biztos, hogy voltak akik üdvözölték anno ennek a formulának a beépítését a programba (2002 óta benne van már!), de a többség valószínűleg máig nem érti, hogy miért van benne ez a funkció, miközben mondjuk angol szövegre nem lehet konvertálni, sőt nincs például NUMBERTEXT funkció sem, ami számot konvertálna szöveggé.

900.jpgDe akkor miért van benne a BAHTTEXT? Sokan sokféleképpen gondolkodnak erről, de több bennfentes is utalt rá, hogy valószínűleg az Excel programozói voltak oda a thai kajáért és ennek a funkciónak a kidolgozásával igyekezték saját rendeléseiket megkönnyíteni. Aki nem hiszi, járjon utána...

Szintén lehetne elmélkedni a CONCATENATE függvény létjogosultságán a & karakter létezése kapcsán, hiszen & segítségével jóval gyorsabban lehet összefűzni cellák tartalmát, mint a függvényben, ráadásul a formula csak 255 paramétert képes kezelni, amilyen korláttal az & nem büszkélkedhet.

De akkor mi lehet a magyarázat? Itt azért elvileg van mihez nyúlni, hiszen nagyon régi Excel-verziókban az & karakter segítségével történő összefűzésnél, ha számokat és szövegeket is össze akartunk fűzni, akkor előfordultak hibaüzenetek, ráadásul VBA-ban is okozhat gondot a változó utáni azonnali & karakter.

Biztos lenne, aki az arab (egyébként eredetét tekintve inkább indiai) számokból rómait varázsoló ROMAN függvényt is felhozná egy ilyen csevegés során, de ennek hasznosságát azért nem szabad teljes mértékben megkérdőjelezni, hiszen elképzelhető olyan dashboard bármilyen környezetben, ahol ilyenre szükség lehet.

Ugorjunk viszont egy kicsit komplexebb formulák felé, amelyek közül a mai posztban az SQRTPI-t járnám kicsit körbe, mert ennek létezése is eléggé elgondolkodtató, még matematikus körökben sem gondoltam eredetileg, hogy gyakran jöhet olyan helyzet, ahol Excelben egy szám és a PI szorzatának négyzetgyökére lenne szükség - pedig az SQRTPI pontosan ezt tudja.

901.jpgDe akkor hol és mire használhatják ezt napi rendszerességgel? Ha nem is rendszeresen, de bizonyos esetekben, ha valamiért Excelben szeretnénk felvázolni a normális eloszlású adataink görbéjét egy koordináta-rendszerben, akkor a megfelelően elegáns görbe kialakításához értelemszerűen a görbe alatti területet is pontosan kell meghatározni - ez pedig alapesetben PI négyzetgyöke lenne. És itt jön be majd egy-két szorzás is a képbe a megfelelő ív kialakítása érdekében, azaz elképzelhető, hogy a SQRTPI is kapóra jön nekünk.

Persze ezek csak az én elmélkedéseim voltak, korábbi tapasztalatok és olvasmányok alapján, ha valaki megcáfolna vagy esetleg jobb magyarázattal rendelkezik, az jelezze nyugodtan.

Az Office-család kevéssé ismert, sokoldalú tagja - OneNote

Az Office programcsomag egyik kevéssé ismert és használt (legalábbis ez az én benyomásom, cáfoljatok rá) modulja az indokolatlanul mellőzött OneNote, amely az egyik legegyszerűbb és legsokoldalúbb tagja az Office-családnak, hiszen használata roppant egyszerű, mégis tökéletes eszköz egy projektmenedzser, egy családi kasszát menedzselő háziasszony vagy egy, a házifeladatát osztálytársak segítségével megoldó diák számára is - de mindenki találhat benne használható funkciókat, így csak azt tudom írni: használjuk bátran! A következőkben néhány olyan lehetőséget fogok bemutatni, amely a OneNote rendszeres használói számára nem jelentenek újdonságot, de aki csak a program lilás ikonját ismeri, az biztosan kedvet fog kapni.

1. Használhat valaki mondjuk SnagItet, küzdhet simán a Printscreen Windows funkcióval, de használhatja a OneNote rendkívül jó képkészítő funkcióját is:

810.jpg

811.jpgEzt előcsalogathatjuk a Windows + Shift + S billentyűkombináció lenyomásával is, majd a képet a vágólapra vagy akár egy jegyzetbe (én így hívom a OneNote által készíthető Note-okat) is be lehet illeszteni. 

2. Ugyanígy készíthetünk hang- illetve videófelvételeket is a mikrofonunk illetve a kameránk segítségével, szóval ha mondjuk a projektünket menedzseljük, akkor videóban is felszólíthatjuk az érintett felelősöket, hogy siessenek befejezni feladataikat - és mivel jegyzeteinket a felhőn keresztül közösen használhatjuk az adott emberekkel, így ez az üzenet azonnal el is jut hozzájuk.

812.jpg

813.jpg3. Rendkívül hasznos funkció (hangsúlyozom, a fentieket és ezt is tudja más tool is, de ettől függetlenül ajánlatos barátkozni a OneNote-tal) a képekből a szöveg kinyerését egyszerűen lehetővé Copy Text from Picture funkció, amelyet a szöveget tartalmazó képen jobb gomb lenyomása után tudunk előcsalogatni:

814.jpg

815.jpg4. Megbeszéléseken sokan WORD-ben, draft e-mailban jegyzetelnek, de a OneNote erre is kínálhat alternatívát, hiszen Outlookból meghívható a OneNote jegyzete:

816.jpgÉs ide, már beütemezett megbeszélésnél bekerül az időponttól, helyszíntől kezdve a résztvevők névsoráig minden, amit tudni kell róla, utána pedig ezt már jóval könnyebb felhasználni egy megbeszélés összefoglaló elkészítéséhez.

5. Ami még jól jöhet a OneNote-ból, az az a funkció, amely lehetővé teszi, hogy mondjuk feladatlistánkat rádiógombokkal tudjuk elkészíteni, majd megosztani a projektünk résztvevőivel, akik aztán akár telefonjukon tudják a feladatokat pipálgatni és így folyamatosan jelzést kaphatunk adott napi-heti feladataink állásáról.

817.jpg

818.jpg

Visszaszámláló kódszelet VBA-ban

Hogy mindig tudjuk hányadán állunk

Valószínűleg többekben felmerült az igény a napi feladatok során, hogy visszaszámlálást szúrjanak be Excel dashboardjukba, táblájukba, mondjuk így jelezve az adott táblát megtekintő felhasználók számára, hogy egy tréning mikor kezdődik vagy éppenséggel mikor van egy feladat határideje.

Bár elsőre komplexnek tűnik egy ilyet megvalósítani, VBA segítségével ezt nem annyira nehéz megalkotni, csak ismerni kell a megfelelő utasításokat (azokat pedig könyvekből vagy éppen a hivatalos Microsoft dokumentációból is le lehet vadászni).

Első lépésként válasszuk ki a cellát, amelyben ezt a visszaszámláló órát szeretnénk elhelyezni, majd a Ribbonunk Home füle alatt található Number szekcióból formázzuk meg Time típusra az adott cellát (ez az én esetemben most az I8 lesz:

800.jpgÍrjuk be a kiválasztott Time formátumban, hogy pontosan mennyiről szeretnénk visszaszámolni - 1 óra, 1 nap, 1 hónap stb.:

801.jpgEzután nyomás a VBA-editorba, ahol az itt már korábban leírtaknak megfelelően szúrjunk be egy új modult az Insert menü Module parancsa segítségével:

802.jpgMielőtt összedobnánk ezt az aprócska kódot, két fontos parancsot jegyezzünk meg magunknak, mert ez a kettő fog segíteni ennek a makróban az összehozásában. Az egyik a TimeSerial funkció, ami nem tesz mást, mint a paramétereiként megadott óra, perc és másodperc értékek alapján visszaad egy időpontot, például

TimeSerial(16,25,17)

4:25:17 időpontot adja vissza. A másik, amit meg kell jegyeznünk a TimeValue funkció, amely a paramétereként megadott dátum értékét adja vissza nekünk, például

TimeValue(12:00 AM)

0.5-öt ad vissza, hiszen az pontosan a nap felét jelenti.

A következő lépések már konkrétan a kódunk felépítéséhez szükségesek, persze nem feltétlenül ez a legjobb megoldás, ami következik, hiszen jómagam is láttam ennek több verzióját, de az alaplogika többnyire azonos. Két szubrutinra, Subra van szükségünk, az első nagyjából nem fog semmi mást csinálni, mint az Application.OnTime metódus segítségével minden egyes értékváltásnál (tehát ha 23:00:00-ból 22:59:59 lesz, az egy értékváltás) újra meg újra elindítja majd a második szubrutint.

Az első Subban definiáljuk egy változót, Date típusként, ezzel is jelezve, hogy itt dátum- vagy időértéket szeretnénk majd tárolni, majd ebbe a változóba töltsük a jelen pillanat idejét plusz egyetlen másodpercet, hiszen azt akarjuk, hogy a visszaszámlálónk valós időben működjön.

803.jpgAhogy látható, változónk neve az Ido (hibát követtem el, hiszen igencsak nem célszerű szubrutinunknak és változónknak ugyanazt a nevet adni, de most már így marad), ezt Date típussal deklaráltuk, majd az itt már többször átbeszélt módon feltöltöttük jelen pillanatunk idejével plusz egyetlen másodperccel. Jelen pillanatunkat a Now paranccsal határozhatjuk meg, ami visszaadja az adott időpillanatot, ehhez pedig hozzáadunk 1 másodpercet. A TimeValue alkalmazására kódunk második részlete miatt lesz szükség, hiszen az Application.Ontime Now +Timevalue (meghatározott időparaméter) azt fogja meghatározni, hogy az ezután megadott szubrutin mennyi idő eltelte után fusson le, azaz kódunknál maradva az

Application.OnTime Ido, "Visszaszamlalo"

utasítás az Ido változóban betöltött 1 másodperc eltelte után lefuttatja a Visszaszamlalo neven létrehozott második szubrutinunkat. Ha abban pedig majd meghívjuk a folyamat végén az Ido szubrutinunkat, akkor belátható, hogy másodpercenként le fog futni mindkettő szubrutin.

804.jpgMásodik szubrutinunkról már tudjuk, hogy a "Visszaszamlalo" nevet viseli és ez nem fog mást csinálni, mint megadott I8 cellánk értékét módosítja másodpercenként. Ehhez először deklaráljunk egy változót Range típussal, ebbe fogjuk beállítani majd kezdőértékként azt a cellát, ahol a visszaszámlálónk fut majd:

805.jpgAki követi a blogot, annak szerintem ezt a részt már nem kell magyarázni, a változónk kezdőértékeként beállítottuk az I8-as cellát az Application.ActiveSheet.Range("I8") utasítással.

És most következik az egész történet kulcsa, amikor Tartomany változónk értékét (Tartomany.Value) megváltoztatjuk a Tartomany változónk értékéből kivont egyetlen másodperccel, amit a következőképpen adunk meg:

806.jpgFentebb már beszéltünk a TimeSerial utasításról, így valószínűleg teljesen egyértelmű, hogy mit miért csináltunk itt, az eredmény pedig az lesz, hogy a szubrutin futása után I8 cellánk értéke 1 másodperccel kevesebb lesz.

Célszerű esetleg betenni egy popup üzenetet arra az esetre, ha végezne a visszaszámláló (hiszen alapvetően pont ez lenne a cél), amit egy szimpla IF utasítással tudunk megtenni, azaz ha Tartomany.Value (Tartomany változónk értéke) eléri a nullát, akkor MsgBox utasítással írjon ki egy üzenetet. Sose felejtsük el lezárni az IF ciklust.

807.jpgUtolsó lépésünk pedig már csak annyi, hogy eme szubrutinunk végén indítsuk el/hívjuk meg a másik szubrutint, hogy jól működjön a visszaszámlálás. Más szubrutinokat a Call parancs segítségével tudunk meghívni.

808.jpgMaga a kód nem bonyolult és a felhasználási területek is elég szűkösnek tűnnek, de a lényeg, hogy tanuljunk belőle és ha már van fogalmunk az időkhöz kapcsolódó parancsok egy részéről, már el tudunk indulni ilyen kódokkal is.

9 hasznos funkció WORD szövegszerkesztőnk gyorselérésű parancsai közé

Sokan sokszor hajlamosak elfeledkezni az Office-programokban a Quick Access Toolbar használatáról, pedig ezzel minden automatizmusnál egyszerűbben és gyorsabban tudjuk munkánkat hatékonyabbá tenni, hiszen például minden keresgélnénk a Paste Special as Value beillesztési opciót, ha szimplán ott virít a kis lapocska (igen, sajnos sok parancsnak nincs annyira egyedi ikonja) a gyorsparancsaink között. A mostani posztban 9 olyan parancsról fogok írni (szakítva a TOP10 beidegződésekkel), amelyeknek megléte igenis a segítségünkre lehet a WORD használata során - alapesetben a default Quick Access Toolbaron a Save, az Undo és a Repeat parancsokat fogjuk megtalálni, de a következőket is célszerű mellé állítani (a következő lista nem fontossági sorrendben készült, de amúgy is, mindenki azt hasznosít belőle, amit akar):

1. VBA-ban automatizált, mondjuk Excelből indított levélküldésünkhöz is fontos ismerni, de a szimplán a szövegszerkesztőt sokat használók is jobb ha hozzáadják a Toolbarhoz a Send to Mail Receipent parancsot, amellyel egyetlen kattintással már egy üres e-mailbe jutunk:

700.jpg2. Ha gyakran vagyunk kénytelenek mások dokumentumait felülvizsgálni, ellenőrizni, akkor a formátumok (kövérítés, döntés stb.) eltávolítása fontos lehet és bár a Ribbonról is elérhető a Clear Formatting opció, gyakoriságtól függően érdemes lehet a Toolbarhoz hozzáadni a Clear Formats parancsot.

701.jpg3. Jómagam elég sokszor használom pdf-olvasóként a szövegszerkesztőt és esetenként mentek is pdf formátumban - ha más is van ezzel így, akkor két opciója van: az egyik a Save as Pdf Add-in feltelepítése (és így a Save as Pdf custom parancs megjelenítése a Toolbar parancsai között), a másik pedig a Save as Other Format parancs hozzáadása a Toolbarhoz.

703.jpg4. Megelőzendő és megválaszolandó az esetleges megjegyzéseket, igen, az előbb említett pontok és egyáltalán, a default Quick Access Toolbar parancsok is előhozhatók billentyűkombinációkkal, de ha sok parancsról beszélünk, akkor nem mindig sikerül mindent észben tartani - azokról az esetekről ne is beszéljünk, amelyeknek pedig nincs is billentyűkombinációja. Ilyen például a Style Inspector parancs, amely bármikor bármelyik szövegrésznél megadja az adott szöveg stílusát.

704.jpg5. Ha valaki igényli, az olyan alapparancsokat is hozzáadhatja, mint az Open, Save és társai, ezekről most is nem is tennék említést, viszont az általam egyik leggyakrabban használt Quick Access Toolbar parancsról, a Paste Special as Values parancsról igen, amelynek hozzáadását mindenkinek csak ajánlani tudom.

6. WORD-ben, nagy dokumentumok használata esetén az áttekintéshez jól jöhet a Document Map parancs hozzáadása is, amellyel könnyedén tudunk sok száz oldalas leírásokat is áttekinteni, azon belül mozogni és keresni.

705.jpg7. A Paste Special as Values parancsnál már írtam a használat gyakoriságáról, ugyanígy igen sűrűn használom a Document Location parancsot, amivel nagyon könnyen meg tudjuk határozni, hogy az adott doksink éppen hol található a könyvtárstruktúránkban - és ez bizony sokszor tényleg elég nagy kihívás egy ilyen kis segítség nélkül.

706.jpg8. A Ribbonról el sem érhető, pedig nyomtatásnál azért gyakran használjuk: a Quick Print parancsról van szó, amely egyetlen kattintásra redukálja a nyomtatáshoz szükséges időt. A Ribbonról el nem érhető parancsokat egyébként a Quick Access Toolbar módosítgatásánál a Commands Not in the Ribbon legördülő menü választásával érhetjük el.

707.jpg9. Utolsóként pedig inkább csak érdekességként jöjjön a Who Is parancs, amelyet szintén hozzáadhatunk a Quick Access Toolbarhoz, ennek segítségével a szövegünkben szereplő nevekre kereshetünk az Outlook kontaktlistájában és találat esetén már olvashatjuk is az adott kontakt adatait, telefonszámát stb.. Lehet nélküle élni, de ez is spórolhat néhány kattintást.

Óriási trükk az Excel egyik nagy öregjétől

Nem kérdés, hogy ha az Excelre gondolunk, akkor a táblázatkezelő legnagyobb ismerői között mindenképpen meg kell említenünk a Microsoft által adományozott Excel MVP címmel is büszkélkedő Bob Umlas nevét, aki a nyolcvanas években (!!) ismerkedett meg először a programmal és annyira a rabjává vált, hogy az Excel első verzióihoz kiadott hivatalos leírásokban már megemlítették, mint egy olyan embert, akihez problémák esetén fordulni lehet. Több, a táblázatkezelőről szóló újságot szerkesztett és több könyvet is írt, úgyhogy ha valaki kíváncsi a munkásságára, nyugodtan kutakodjon - bőven lehet tőle tanulni.

Anno az egyik könyvében (a legendás és mindenkinek szigorúan ajánlott Excel - outside the box címűben) világított rá egy érdekes és vicces kis trükkre, amely bonyolult táblázatok esetében akár még hasznos is lehet, de igazából inkább csak afféle bűvészmutatványként gondoljunk rá.

Adott mondjuk az alábbi két kis táblánk (több tábla esetében értelemszerűen jobban látszik a hatás):

680.jpgMost a Ribbonunk Home füle alatt található Defined Names szekcióból, a Name Manager segítségével hozzunk létre két elnevezett tartományt a két táblánkra:

681.jpgTörténik valami, ha most elkezdünk zoomolni és mondjuk kicsinyítjük vagy nagyítjuk a munkalapunkat? Alapvetően legtöbben úgy gondolnánk, hogy nem, hiszen mondjuk 50%-ra kicsinyítve sem láthatunk semmi extrát:

682.jpgNa de mi történik ha 40%-ra vagy az alá kicsinyítünk?

684.jpgBizony, jól látjuk, a táblázatkezelő megjeleníti az elnevezett tartományaink nevét a kis táblákon, ami igazából csak viccesnek nevezhető, hiszen nem nagyon látom be jómagam sem, hogy ez hol jöhet kapóra, de ha valakinek segít valamiben vagy csak egy mosolyt csalt az arcára - már megérte.

683.jpg

süti beállítások módosítása
Mobil