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.
Számomra rejtélyes ügyben szeretnék segítséget kérni. Excelből Wordbe másoltam át sok diagramot, az eredmény egy 16 MB-os doc lett, nekem pedig kisméretű fájl kellene. Már rájöttem, hogy képként kellett volna átmásolni a diagramokat Irányított beillesztéssel, nem pedig sima vágólappal. Nekiálltam kitörölni az ábrákat és az említett módon újra beilleszteni, de a doc fájl mérete nem változott - még akkor is 16 MB maradt, amikor minden létező ábrát és szöveget kitöröltem belőle. Meg tudná mondani valaki, hogy hogyan tudnám csökkenteni a méretet úgy, hogy csak az ábrákat cserélem?
szűrő mindent átenged, aminek az első karaktere chr(64)-nél kisebb. Pl. "#", " ", "3vnsfgder" Ezek mind átmennek. Attól függően, hogy az 1-2. feltételben beállított számhatárok micsodák, ezek a karaktersorozatok átmehetnek mind 3 szűrőn, és nem lesznek pirosak.
Cells(2,2).Value = 3 ), majd a makró futása után (a táblázat felhasználásakor) "jelezzen a cella", ha esetleg valaki szám helyett szöveget írna ide.
Bocs, de nem inkább érvényességi feltételt kellene beállítani erre cellára, nem feltételes formázást?! Ilyenkor a szöveget be sem engedné írni a cellába. (Normál Excelben Adat/Érvényesítés menüpont, de le is makrózható) Üdv József
Makrórögzítéssel vittem be. A 100 alatti, az 500 fölötti, és a szöveges értékek hátterét pirosítja ki. Ha a betűt akarod színezni, az Interior helyett írj Font-ot.
Úgy gondoltam, hogy makróból beírok egy számot egy adott cellába ( mondjuk Cells(2,2).Value = 3 ), majd a makró futása után (a táblázat felhasználásakor) "jelezzen a cella", ha esetleg valaki szám helyett szöveget írna ide.
Minden lehet. Nézegettem a beállításokat, de nem emléxom olyanra, hogy sorok vagy oszlopok védelme. Most nincs nálam excel, csak OOo Calc, abban nincs ilyen opció. Majd holnap megnézem a munkahelyemen. De nem is ez a fontosabb, mert ez csak nagyon ritkán fordul elő. A cella elmozgatás az ami rendszeresen megtörténik, aminek a következtében egy csomó számolás hibát ereményez, és eléggé macerás a visszakeresés, hogy hol kefélődött el a dolog. Szóval minden ötlet érdekel.
Jajj. Az első Sub-ból a Sheets("Munka2").Range("A1") = Sheets("Munka2").Range("A1") + 1 sor törölhető. Ez csak egy ellenőrző/tesztelő szerepet játszott. Nincs rá szükség.
Sub ChangedAreasInit() ChangedAreas = 0 Sheets("Munka2").Range("A1") = Sheets("Munka2").Range("A1") + 1 End Sub
Munkalap modulra Private Sub Worksheet_Change(ByVal Target As Range) ChangedAreas = ChangedAreas + 1 If ChangedAreas = 2 Then Application.Undo MsgBox "Nono. Ne húzgáld a cellákat." End If Application.OnTime Now + 1 / 864000, "ChangedAreasInit" End Sub
Azon alapszik az egész, hogy ha cellamozgatás van, akkor a Worksheet_change esemény 2x hajtódik végre. Egyszer az elmozgatott, egyszer pedig a felülírt cella váltja ki. Ha minden kiváltott eseménynél eggyel növelem a változások számlálóját, akkor a cellahúzás során a számláló értéke kettővel nő. Vagyis, ha az érték 2, akkor cellamozgatás történt. Ekkor a kód végrehajt egy visszavonás (Undo, Ctrl+Z) műveletet. És minden változás után 0.1 másodperccel nullázom a számlálót.
Időzítés problémák esetleg lehetnek.
A cellamozgatás során a 2 change esemény egymás után gyorsan lefut, nincs közte 0.1 másodperc, tehát a számláló eléri a 2 értéket, és a kód figyelmeztet, illetve visszavonja a húzást. A felhasználó viszont valószínűleg nem fog 0.1 másodpercen belül 2 különböző cellát módosítani, ezért a számláló sosem éri el a 2-t, és nem fog a kód téves risztást küldeni.
Ha meg a felhasználó villámgyors, akkor sem történik katasztrófa, legfeljebb egy művelete visszavonódik, és nem érti, hogy miért ne húzgálja a cellákat. :)
Kísérleteim szerint a sorbarendezés meg a képleteket tartalmazó cellák automatikus frissülése nem zavar be. Más probléma persze előfordulhat, sosem lehet tudni.
A kérdésem az lenne, hogy makróból be lehet-e állítani egy adott cella (Cells(i,t)) feltételes formátumát, mégpedig azt, hogy az adott cella színe legyen mondjuk piros, ha a futtatás után létrehozott táblázaban valaki szám helyett szöveget vagy adott számtartományon kívüli számot írt a cellába?
A sor- és oszlop-törlést nem tudtam reprodukálni. Még ha egy egész oszlopra is megszüntetem a zárolást, akkor sem tudom törölni a védett munkalapon. Viszont a munkalap levédésekor meg lehet határozni, hogy mit tehet és mit nem tehet az, aki nem tudja a jelszót. Itt olyan is van, hogy oszlopok, sorok törlése. Nem lehet, hogy ez van rosszul beállítva nálad?
A cellamozgatás letiltásán még gondolkodom. Van egy tippem, csak még nem tudom, működik-e...
"Egyébként ugyanezt írja a DJCarlos által javasolt link is, amiben nagyon helyesen ajánlja a más formátumú oszlopok azonos formátumúvá konvertálását, viszon az, hogy nem egészíti ki azonos hosszúságúra az egyes oszlopok adatait, hibát okozhat."
Csatlakozom az előttem szólóhoz. Ez az összefűzős módszer az oszlopok adatainak összefűzésével nagyon jó találmány, én is sikerrel alkalmaztam több esetben. Nem csak makróval, hanem képlettel is használható, és egy kis furfanggal megspékelve hihetetlenül egyszerűen meg lehet oldani vele viszonylag bonyolult problémákat.
Amit hozzátennék még 6330-hoz: 1) Nem szükséges különválasztani a feladatot 2 rendezési lépésre. Össze elhet fűzni az F oszlopban A-tól E-ig mind az öt oszlopot, aztán egy lépésben sorbarendezni. Az összefűzés sorrendje az legyen, ami az oszlopok prioritása a sorbarendezésben. 2) A számértékek szöveggé alakítására ezt a javaslatot kaptuk: =BAL(A1&" ";20) Ezzel az a probléma, hogy a számok sorrendje így megváltozik. Pl. ha 1-től 10-ig vannak a számok, akkor a sorrend ez lesz: 1, 10, 2, 3, 4, 5, 6, 7, 8, 9. Ez azért van, mert ha jobbra teszem a számok mellé a szóközöket, aztán egyforma méretűre vágom a kapott sztringeket, akkor a számjegyek helyiértéke megváltozhat. Ha viszont balra teszem a szóközöket, akkor nem. Ezért szerintem a következő képletet kellene alkalmazni a szám sztringgé való alakításakor: =JOBB(" "&A1;20)
Ara tudtok-é valami megoldást, hogy egy munkalap - mely jelszóval védett, de tartalmaz módosítható cellákat is, hogy fel lehessen tölteni adatokkal - celláit az egységsugarú felhasználók ne tudják "elmozgatni" a helyükről? Illetve, sorokat, oszlopokat ne lehessen törölni? Mert sajnos ez is előfordult már. :(
Az biztos, hogy kissé nehézkes, de jól működik. Sok adattal kipróbáltam, jó az, amit a #6330-ban, és az azt kijavított #6332-ben leírtam.
Egyébként ugyanezt írja a DJCarlos által javasolt link is, amiben nagyon helyesen ajánlja a más formátumú oszlopok azonos formátumúvá konvertálását, viszon az, hogy nem egészíti ki azonos hosszúságúra az egyes oszlopok adatait, hibát okozhat.
Miért gond a makró? A rendezések előtt bekérheted az oszlopok sorszámát.
Hát igen, de így roppant nehézkes a dolog (főleg, ha makróból csinálod: mert azt nem lehet csinálni, hogy egy parancssorral lerendezed a teljes tartományt, majd egy következő parancssorral újból az egészet a másik 3 kulcs szerint, mert akkor az első rendezettséged felborul és marad a legutolsó rendezettséged. Ezt csak úgy lehet, ha a másodszori rendezést már az első egy meghatározott tartományára végzed el. Itt viszont felmerül a tartomány problematikája, hogy hogy határozod meg előre azt a tartományt, amin belül másodszor rendezni akarsz.)
Szumma szummárum, igencsak bekorlátozza ez a max 3 kulcs az excel adatbázisként való használatát...
Három kulccsal lehet közvetelnül rendezni, én is úgy tudom. De akkor többször kell rendezni, pl. 6 kulcs szerint akarsz rednezni egy tartományt, akkor megrendezed az egészet 3 kulcs szerint, majd újból a megrendezett egészet a maradék 3 kulcs szerint.