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.
Sajnos mind a Word-nek, mind az Excel-nek sajátossága, hogy sok szemetett is elment a fájlokba. Nálam már sok alkalommal segített, hogy egy M$ fájlt OOo-val (OpenOffice.org-gal) nyitottam meg, aztán vele ismét elmentettem open document formátumban is, és M$ formátumban is. Mindenféle változtatás nélkül. Az open document formátum eleve tömörített, így kisebbek a fájlméretek, csakhogy a M$ programok nem tudják kezelni őket. :( Ám a legtöbb esetben a M$ formátunban is lecsökkentek a fájlméretek. Volt, amikor kevesebb, mint a fele lett. A szemét nem lett elmentve. Próbáld ki!
Megér egy próbát, mentsd el más néven a dokumentumot.
A Wordnek megvan az a sajátossága, hogy a doc eltárolja a benne végzett módosításokat, amik növelik a méretét. Ha az új fájl mérete kicsi, OK. Ha nem, akkor egy újonnan megnyitott doc-ba másold át a régi szövegét, mentsd el, ezután csatolj.
Mivel sok diagramot kell csatolnod, érdemes az első csatolást makróra rögzíteni, billentyű kombinációt rendelni hozzá, és a többit már ezzel csatolni.
Adott egy Form, melyen van egy Combobox, melynek a Text-e alap állapotban üres. Labelekben megjelennek különböző adatok, melyek a Combobox értékétől függnek. Gombnyomásra megnyílik egy másik Form, ahol a Labelekben megjelenő értékeket lehet módosítani a "Lezárás" gombbal. Amennyiben a Combobox üres, nincs is baj, de ha nem akkor a Combobox folyamatában hibát jelez. A probléma az, hogy egy olyan munkalapon próbálja végrehajtani a feladatot ami nem is szerepel a Combobox eseményében. A konkrét kérdés igazából az, hogy a Combobox Click eseménye miért fut le amikor nem is történik benne változás és nem is kattintok rá csak egy másik Form bezárul, vagy ha ez mindenképpen lefut, hogyan lehet, hogy olyan munkalapra megy, ami nem is szerepel az eseményben.
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.