Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Ez egy riport. :-) Csak két táblázat van egymás alatt, és nem tudom, hány soros lesz a felső, ezért kezdtem úgy, hogy munkalap takarít, felső táblázat kész, alsó fejléc formáz...
Amit még lehetne, hogy külön takarítana az alsó táblázat fejléce fölött és alatt, előbb törölve a sorokat, aztán egyenként beszúrva annyit, ami kell... Sokkal bonyolultabb.
Vagy esetleg törölné az összes sort (nem tartalmat) a kilencediktől kezdve a maxsor-adikig, aztán a megfelelő lélektani pillanatban beszúrná a kívánt három sor fejlécet egy szervizmunkalapról másolva. Ezt elfogadja egy megosztott munkafüzet? Szerintem igen, mert sorbeszúrást meg törlést rendszeresen csinálunk (azt sem értem, miért kevésbé veszélyes, mint cellát egyesíteni, ebben még mindig nem vagyok meggyőzve, de mindegy). Valaki tud segíteni egy ilyen kóddal?
Szerintem fejlécet a riport kapjon, ott van értelme, az adatfeldolgozásra szánt munkalapokon fölösleges. Vagyis: legyen egy riport template munkalap, előre megformázva, cellák egyesítve, stb. Erre a munkalapra csak meghatározott helyekre kelljen meghatározott adatokat VBA kóddal beírni, és ennyi. Minden egyéb művelet olyan munkalapokon történjék, ahol nincs cellaegyesítés. Az egyesített cellák kezelése VBA-ban egyenlő az ön-tökönszúrással és csak erős idegzetűeknek ajánlott. Esetleg alacsony vérnyomással küzdőknek.
1. A különféle vezérlők betűtípusát a Font property állítja be. Ez tervező módban is elérhető, és a látszat ellenére nem csak a betűtípus nevét, hanem méretét, Bold, Italic tulajdonságát is lehet vele állítani.
2. Én a DoEvents utasítást próbálnám meg, valahogy így:
Fogalmam sincs, hogy a szerzők mit gondoltak akkor, amikor ezt így oldották meg.
4. Szerintem teljesen jó az új űrlap beiktatása. A funkciók logikus csoportosítása és elkülönítése talán így oldható meg a legtisztábban. Vannak persze más lehetőségek is, pl ha magán az adatbeviteli űrlapon van egy választó funkció, amellyel meglévő rekordok közül lehet választani módosításra, és amely elrejthető Visible = False beállítással, ha új rekordról van szó. De tapasztalatom szerint a leendő felhasználók informatikai intelligenciaszintjére tekintettel általban nem érdemes komplexebb megoldásokat erőltetni, inkább törekedni kell a minél egyszerűbb, lehetőleg csak szándékosan eltéveszthető megoldásokra.
Nekem is felmerült egy kérdésem. Miért Excel, miért nem Access?
A képlet beírása után persze nem árt, ha írásvédetté teszed a cellákat.
Egy másik megoldás, hogy az eredménycellákba minden faxni nélkül beírod az eredményeket, de a láthatóságukat feltételes formázással szabályzod. Pl ha $a$1="" akkor a fontok szine egyezzen meg a cellaháttér színével (lehet választani a fehérszint is). Ekkor az eredmény csak akkor fog látszódni, ha a1-be beírsz valamit. A cellák írásvédetsége természetesen itt is megfontolandó.
A fifikás diákok persze még igy is leleshetik az eredményt a szerkesztőlécről. Ez ellen a szerkesztőléc kiiktatásával védekezhetsz.
AZt szeretném, hogy bizonyos cellák tartalma csak egy adott cella értékétől függően jelenjen meg. Konkrétan, adott egy csomó matekfeladat generálva, eredményekkel együtt, ám azt nem akarom láttatni, csak ha pl A1 = 1, szóval ez a cella egyfajta kapcsoló lenne. Segítsetek :-)
Megosztott munkafüzetben egyáltalán nem lehet cellákat egyesíteni vagy szétbontani. Suxxxx&#^˘°^˘°^#@@#&&{&@{>#&˘!!!!
You do not expect to change the following features, which cannot be modified after a workbook is shared: merged cells, conditional formats, data validation, charts, pictures, objects (including drawing objects), hyperlinks, scenarios, outlines, subtotals, data tables, PivotTable reports, workbook and worksheet protection, and macros.
Egy csomó érthetetlen korlátozás. :-((((( Még jó, hogy dolgoztam vele, most tervezhetem át a táblázatot ortopédra.
Ebben az a furcsa, hogy a megosztás előtt még futott a makró, és a próbatáblázaton is látom, hogy megosztás nélkül fut a makró, megosztott módban meg nem. És ráadásul debugolni sem lehet, mert a hiba csak megosztva jelentkezik, és olyankor nincs kód... A 22-es csapdája, nem?
Majd a többi oszlopba kiszámolod az egyeneseidnek a abszcisszaértékekhez tartozó értékeit. Amelyik abszcisszaérték kivűl esik az érdeklődési körödön annak az y-celláit üresen hagyod.
Majd az XY diagram lehetőségeiből a több vonalast választod. És kész.
Köszi, szuper minden. Már csak egyre nem jövök rá: hogy lehet a scrollbart visszatenni a makró végén a lap tetejére? (Azaz a rögzítés alatti sorra. Szóval ütközésig fel.)
És még egy kérdés: Az elkészült adatfelviő lap alapján kitöltődik az excel tábla, de szóba jöhet a már korábban felvitt adatok módosítása. Ez az adatfelviteli képernyővel megoldható, annyi különbséggel, hogy a userformon az egyes boxok nem üresek, hanem a beolvasott adatokat tartalmazzák.
Amit még nem gondoltam végig, illetve kissé bizonytalan vagyok, hogy miként tudom megoldani a korábban felvitt adatok közti böngészést, hogy aztán eljussak az adatfelviteli képernyőig. A keresésnek nyilván az adatfelviteli userform inicializálása előtt kell megtörténnie. Kérdés, hogy a keresést hova tegyem.
Pillanatnyilag az a struktúra, hogy van egy userform, ami a menüt tartalmazza (Adatfelvitel, adatmódosítás stb. gombokkal). És ezen az adatfelvitel választása után hívom meg az adatfelviteli képernyőt tartalmazó userformot.
Az elképzelésem, hogy az adatmódosítás előkészítésére kénytelen leszek közbeiktatni egy új userformot, amin csak egy választó eszköz van (ez feltehetőleg listbox lesz, de még ebben sem vagyok biztos), és a kiválasztás után ez hívja be az adatfelviteli formot.
Jó ez így? Vagy van egyszerűbb megoldás, mint egy közbeiktatott userform használata?
Jimmy még egyszer nagyon köszönöm. Áttértem a comboboxra, ahogy ajánlottad, és azóta elkészült az adatfelviteli rész, és működik végre az adatlapom. A többi adatlap az már a meglévőnek a klónja lesz néhány további adattal, tehát nem félek tőle.
Azért beleütköztem néhány problémába:
1. Egyes boxoknál (egy éveket bekérő textbox, aminek adtam bemenő értéket - évszázad, amit csak ki kell egészítenie a felhasználónak, aztán több combobox) a default betütípus bold volt, anélkül, hogy szándékom szerint beállítottam volna. Másoknál normál szöveg volt. Végül a programból a .Font.Bold = false beállítással el tudtam érni a normál szöveget. Most már csak kíváncsi vagyok, hogy mitől állítódik alaphelyzetben nullára, valamint arra, hogy jól látom-e, hogy ezt a propertiesnél nem tudom beállítani, csak programból.
2. A programban az egyes tételek kitöltése és az adatsor táblázatba írásakor egyben mentem is az állományt biztonsági okokból. És ez dolgozik 2-3 másodpercet. Ezért erre az időre szeretném bekapcsolni a homokórát (Application.Cursor = xlWait). Az viszont csak olyan késleltetéssel jelentkezik, hogy többnyire nem is jelenik meg, vagy legfeljebb a várakozás utolsó másodpercének töredékére. Ha beiktatok a homokóra után egy várakozást (pl. msgbox), akkor megjön a homokóra. Lehetséges programból kikényszeríteni a homokóra azonnali megjelenését?
3. A következő inkább csak észrevétel, nem annyira kérdés. Teljesen megdöbbentett, hogy a formokon nem működik az eseménykezelő tiltása (Application.EnableEvents = False). (Legalábbis 2003-as verzió alatt) Ha a change funkció módosítja a box értékét, simán visszaugrik a vezérlés a change elejére. Aztán később megtaláltam ezt dokumentálva (http://www.cpearson.com/excel/SuppressChangeInForms.htm), és volt javaslat a kivédésére is. Azért érdekelne, hogy ezt szándékosan oldották meg így, vagy egyszerűen elfelejtkeztek róla a szerzők.
Siman a "0"&A1 azert nemjo, mert ha eredetileg is 4 karakteres az azonosito, akkor hozzarakja a 0-t amivel 5 karakteres lesz es vegkepp nem fogja megtalalni az erteket.
RIGHT("0"&A1,4), pedig hozzaadja a 0-t minden ertekhez, majd jobbrol 4 karaktert levag, igy mindig meglesz a 4 es 0 is lesz elottuk, ha 3 karakteres az eredeti azonosito.
A getpivot meg a vlookup utan talan leghasznosabb fuggveny amit eddig hasznaltam :)
Az SAP-rol mint rendszerrol gondolom hallottal mar, itt csak annyit ertettem alatta, hogy egy SAP-bol lehuzott adatbazis az egyik kiindulo pont.
Én is töprengtem a problémádon, és épp akartam javasolni, hogy próbáld ki, hogy a "0"&A1-t textform'tummá alakítva elfogadja-e a getpivot, amikor láttam, hogy már oké a helyzet. De azért megkérnélek, hogy nézd meg. Kiváncsi lennék ugyanis, hogy jó volt-e a megérzésem. Magam sajnos nem tudom leellenőrizni, mert lövésem sincs, hogy mi az a sap, és a getpivothoz sem volt még szerencsém.
Ja megegy: egyebkent van mod SAP-t direktben interfaceelni Excellel (es akkor feltelezem Access-el is). Meg nem hasznaltam, csak mutattak hogy van ilyen. Kell neki egy kulon plugin amugy.
Adott 2 kulso forrasbol (SAP + Access) szarmazo adatbazis melynek van 1 kozos oszlopa, amiben egy alapvetoen 4 szamjegyu azonosito kod van.
Ez a kod van amikor 0+3szamjegy es van amikor 4 szamjegy formaban van.
Az SAP-os letoltes a 0+3 formatumu azonositokbol mindig lenyeli a nullat (tehat pl. 0123-bol 123 lesz csak), ellenben az Access-es meghagyja a 0-t, sot alapbol Textkent adja meg (pl. '1234).
Mindket tablazotbol van csinalva egy pivot, majd egy harmadikban hasznalnam a =GETPIVOTDATA() fv-t rajtuk.
A fuggveny ezt az azonositot egy cellabol veszi es a problema hogyha oda ugy irom be h '123, akkor csak az SAP-os adatbol szedi ki a szamot, ha viszont '1234 akkor meg csak az Access-esbol.
Nyilvan valahogy kozos formara kene hozni ezeket, ami nem is bonyolult:
(=IF(LEN(A1)=3,"0"&A1,A1) es ezt siman meglehet adni a kiindulo pivotoknak, azonban ennek ellenere nem szedi be rendesen az ertekeket.
Probaltam mar a VALUE(), FIXED(), TEXT() fuggvenyeket is, de valahogy egyikkel se jo.