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.
For l = 3 To 13 Step 2 'Range(Cells(sor + 1, l), Cells(sor + 1, l + 1)).MergeCells = True ' Megosztott munkafüzetben nem működik. Range(Cells(sor + 1, l), Cells(sor + 1, l + 1)).HorizontalAlignment = xlCenterAcrossSelection Cells(sor + 1, l).HorizontalAlignment = xlCenter Cells(sor + 1, l).Value = Cells(sor, 2).Value + (l - 1) / 2 - 1 ' A felette levő sor B oszlopából veszi a kezdődátumot Cells(sor + 1, l).NumberFormat = "mmmm d." Next l
Nem azt a szintaxist használtam a range-ben, mint te, mert a ciklusváltozót nehéz betűvé alakítani, de nem hiszem, hogy ez a gond, mert a kikommentezett sor ugyanezzel simán működik, ha nincs megosztva a munkafüzet.
Kipróbáltam, attól sem függ, hogy szegélyezek-e utána és attól sem, hogy ráeresztek-e explicit egy középre igazítást a következő sorban. Egyszerűen a bal oldali cellában marad.
Hát ez a megfelelő elhelyezés az, ami nem megy nekem. Tegnap este óta próbálom, keresem fórumokon a megoldást, de nem találom. Pedig a súgó szerint működnie kellene: "In a Frame that contains other controls, the focus moves to the first control in the Frame, and subsequent keyboard events apply to the control that has the focus."
Annyit látok, hogy másoknak is van problémája ezzel.
Próbáltam a setfocus utáni sorba betenni a doevents parancsot, de a füle botját sem mozgatja. Viszont ha megállítom a futást egy breakpoint beiktatásával, és a megállás után f5-el továbbengedem, akkor érvényre jut a parancs.
Ha tudod a rögzítés utáni első sor számát (legyen a 3. sor) és az első oszlop betűjelét (legyen C), akkor range("C3").select, vagy cells(3,3).select. Erre gondoltál?
Talán már feltűnt, hogy háklis vagyok rá, ha összemossák a táblázatot az adatbázissal (talán mert egy adatbázis szerető gazdájaként élem a hétköznapjaimat). Igazából az én hibám, hogy nem kezdtem a riport szónál tiltakozni, csak éppen nem volt időm-erőm ezen szőrözni. Van egy sokfülű munkafüzet pü. adatokkal, amiből időnként újat kezdünk, és amikor újat kezdünk, akkor a régi munkalapjairól el kell végezni az összegzést, egy alkalommal, ennyi.
A rendszert örököltem, már így is sokat fejlesztettem rajta, és ha rajtam múlna, adatbázisban lenne, és nem lenne vele ennyi problémám, de erre még nem állunk készen.
Userformmal kapcsolatban kérek segítséget. Azt hogyan lehet befolyásolni, hogy a formon található boxok közül melyikre ugorjon elsőként a vezérlés? A sorrrendjüket tudom, hogy a tab order szabályozza. De, hogy melyikkel kezdődjön a munka, azt nem.
Nálam a következő a helyzet: Ha a programban inicializásáskor szépen előkészítem őket adatbeadásra, akkor azt teszi, amit gondolok, a tab order szerinti elsőre ugrik.
Hanem amikor már meglévő adatrekord módosítását készítem elő, azaz a már korábban munkalapra mentett adatmezők tartalmát kiolvasom és az értéket kiinduló értékként teszem a boxba (vegyesen vannak textboxaim és comboboxaim), akkor számomra rejtélyes okokból valahova a közepére áll. De, hogy miért, arra képtelen vagyok rájönni. Nem arra, amelyiknek először adtam értéket, nem is arra, amelyiknek utoljára. Nem is névsor szerint. Egy jó, hogy legalább következetesen ugyanarra az elemre lép elsőként, tehát feltehetőleg valami beállítja így, így hátha nekem is lesz módom befolyásolni a dolgot.
Köszönöm. Kérdésedre, hogy miért Excel, miért nem Access, egyszerű a válasz. Még soha nem dolgoztam az Accessel, és bár sejtettem, hogy az megfelelő lenne, nem mertem alapismeretek nélkül belevágni, mert nem tudtam felmérni, hogy az alapok elsajátítása mennyi időt igényelne.
Az Excel programozás alapfogalmaival valamilyen szinten már megismerkedtem korábban, most az adatbevitel volt az, amit nulláról kellett megtanulnom. De ha ezzel a programmal most kész vagyok, meg fogom nézni az Access-t.
Ha ez egy riport, akkor miért a megosztott munkafüzetben van? A riport egy pillanatkép az adatbázis állásáról, bizonyos szempontok szerint összeállítva. Ha naponta készítenek tíz riportot, az mind benne van a megosztott workbook-ban? Nekem úgy lenne logikus, hogy a kolléga dolgozik a megosztott munkafüzetben, aztán megkattint egy gombot, erre a program létrehoz egy független munkafüzetet saját gépen, és abba generálja a riportot. Azt utána esetleg elmenti archiválás céllal, vagy elküldi a főnökének, vagy ilyesmi.
MÉg az az út is nyitva áll, hogy az alsó táblázat külön lapra kerüljön, csak nem akartam, mert így is annyi füle van, mint az oroszoknak együttvéve, és gyengék a gépeink.
Egyébként az adafeldolgozó munkalapokon is kell a fejléc, mert annak alapján tudnak beleírni a dolgozók, de azt nem kell makróval kezelni, mert fixen helyezkedik el a lap tetején.
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.