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.
Mivel az excel sorainak száma 1-től kezdődik, így természetesen negatív számú sorra nem tud rápozicionálni a scrollrow. Ez komoly hibája, ezért nekünk kell erre figyelni, pl. így:
Activewindow.scrollrow=iif(arrIndexMax - 25<1,activewindow.scrollrow de ide írhatod ezt is: 1,arrIndexMax - 25)
Ebben az esetben vagy marad az ablak tetején az a sor, ami eredetileg is volt, vagy az első sor kerül oda, attól függően, mit írtál középre.
A smallscroll ezek szerint "intelligensebb", tudja kezelni, hogy negatívba nem viszi a sorszámot, hanem marad az első sorban.
Kipróbáltad amit azzal kapcsolatban írtam? (Nyilván a 25 sor az elméleti, az a kérdés, mennyi látszik az ablakodban.) De nézd meg nagyított nézetnél is lsz (amikor az ablakban pl. 10-12 sor látszik csak).
Valószínű, hogy amikor behívod a táblázatot, akkor az első sor kerül az ablak legfelső részébe, ezért múködik a smallscroll jónak tűnően.
Mégegyszer hangsúlyozom, a fontos különbség, hogy a smallscroll relatív - az aktuális helytől számol, a scrollrow pedig abszolut, konkrétan megadott sort ugratja az ablak tetejére.
Nem pontos ez így. A megadott változó az utolsó sor sorszámáta daja meg amiből visszaszámol 25-öt. Nagyobb táblázatnál mindig a megjelenített sorok közül az utolsó 25-öt mutatja míg 25 sornál kisebbnél csak annyit amennyi van. Hibát nem hoz.
Még annyit az előzőekhez: Te nem 25 sorral a táblázat vége előttre pozicionáltál, hanem a srollozandó sorok számát állapítottad meg a táblázat vége - 25 sorban. Így pl. 100 soros táblázatnál a scroll mértéke 75 sor lesz.
Ez akkor működik úgy, ahogyan szeretnéd, ha max a 25. sorban áll a cursorod. Ha viszont a 25-dik sornál lejjebb vagy, azt fogod tapasztalni, hogy "eltűnik" a táblázat, mert akkorát scrollozik az utasításod.
Igen, csak a smallscroll-nak és a scrollrow-nak más-más a funkciója:
A smallscroll egy metódus és görgeti az ablakot abba az irányba amerre akarod és olyan lépéssel, amekkorával akarod, onnan ahol éppen állsz.
A scrollrow (és scrollcolumn) egy tulajdonság, ami megmondja, hogy hányadik sor/oszlop legyen a bal felső szélén az ablaknak. Azaz itt direktben megadhatod, hova "scrollozzon" a képernyő, melyik legyen az első sor, vagy első oszlop amelyik látszik.
Amit a 22751-ben megadtam az a "arrIndexMax" a táblázat utolsó sora amihez képes 25 sorral vissza pozicionáltam. Igy szépen látszik a táblázat vége és még marad néhány üres sor.
Próbáld ki az activewindow.scrollrow=táblázatvége sor -x utasítást.
A táblázatvége sor jelenti azt az utolsó sort, ameddig a táblázat tart (ezt neked kell megállapítanod!), az x pedig, ahány sort akarsz még látni a táblázatból. (Mert gondolom, nem csak a legutolsó sort szeretnéd látni.)
Nem tudom de tény, hogy mindig a táblázat elejét mutatta. Elegánsabb lett volna amikor a tábla áttöltődik (ugyanis más lapról érkezik szűrve) azonnal a végére ugrana és azt mutatná. Kistáblázatról van szó tehát a sebességet nem igen befolyásolja ez a módszer.
Ha a cursort ráállítom valamelyik távoli oszlopra, mondjuk BA-ra, majd az alsó gördítősávval visszahúzom a képernyőt a táblázat elejére, miközben a cursor marad a BA oszlopon, és így mentem, akkor pont az történik, amit írsz. Nem lehet, hogy nálad is ez történt?
Megnyitok egy táblázatot annak mindig az elejét látom miközben a végére kellene ugrania és azt látnom. Hiába próbálkozom cella cimzéssel, select utasítással. A cusor oda megy de a tábla nem ezért mindig scrolloznom kell.
Pedig a szűrés jó ötlet. Úgy emlékszem az autószűrő is tud több oszlopra a VAGY feltétlellel szűrni (azaz egyaránt kiszűrni az otthoni és az idegen oszlopbeli előfordulásokat), de most hogy keresem, nem találom ezt a lehetőséget. A Speciál szűrő (a 2003-ban Írányitott szűrő) azonban biztosan alkalmas erre. Amit egyaránt használhatsz helyben szűrésre vagy új helyre történőre. A trükkje, hogy kritérium tartomány 3 soros legyen. 1. Fejléc: otthon/idegen 2. A keresett csapat az otthoni oszlopban. 3. A keresett csapat az idegen oszlopban is. Ha ennyi kevés lenne, az excel súgója elég jól elmagyarázza.
Még annyit érdemes tudnod, hogy a kritérium cellákba nem muszáj a keresett teljes nevét beírni. Elég belőlük néhány egyedi betűsorozat 2 csillag között. Pl. *Liver*, *city* stb.
Mivel a csillagos beírás frankón működik, a belinkelt web táblázatból sem muszáj a otthoni és idegenbeli oszlopokat szekesztened, mert mérközésoszlopra rászűrve a ** közé írt csapatjelöléssel kiszűri neked az összes előfordulást. Persze ekkor a kritériumtartományt 2 sorosnak kell meghatároznod.
Azt szeretném kérdezni, hogy hogyan tudok egy olyan szűrést megcsinálni, ami kidobná x csapat eredményeit, mind a hazai, mind a vendég meccseket egyszerre, időrendei sorrendben.
Próbálkoztam úgy hogy táblázattá alakitottam és ott szűrés, de ott csak vagy a hazainál, vagy a vendégnél engedi meg a szűrést külön-külön, együtt nem. Esetleg vmilyen kereséses fügvvény alkalmazása, stb, nem tudom mi lehetne a megoldás.
Miután elküldtem a makrót, rájöttem, hogy sokkal praktikusabb lenne a beforesave makrót open-ként megadni és kiegészíteni a beirás makro subrutinnal. Így a filemegnyitáskor már rögtön bekéri a user nevét. Ha rossz nevet ad meg, akkor javíthat a beirás makró direkt indításával.
A beforesave makró átírva, a változtatások kivastagítva. A beirás makró változatlan.
Néztem a makródat, de már az első sorban elakdtam :))). Azt hogyan kell csinálni, hogy 3 nevet megadni egy érvényesítésben? Próbálgattam, de nem jöttem rá.
Szóval az alábbi 2 makróval oldottam meg. Mindkettőt az adott füzet ThisWorbook moduljába másold. A védett munkalap a Munka1, a védelmi jelszó xxx, a három felhasználó titkos nevei, pali, peti és poka, akik 3, 4, 5 oszlopokhoz férhetnek hozzá. A felsorolt beállításokat igazitsd a te lapodhoz. Miután megvan a makró, mentheted a füzetet. A fiúk amikor be akarnak írni, a beírás makrót indítsák. A kijelölt tartományba írhatnak.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Cells.Select Sheets("Munka1").Unprotect ("xxx") Selection.Locked = True Selection.FormulaHidden = False Sheets("Munka1").Protect ("xxx") End Sub
Sub beiras() Dim ppw, oszlopNo ppw = InputBox("Mi a titkos neved?") If ppw = "pali" Then oszlopNo = 3: GoTo cimke If ppw = "peti" Then oszlopNo = 4: GoTo cimke If ppw = "poka" Then oszlopNo = 5: GoTo cimke Exit Sub cimke: Sheets("Munka1").Unprotect ("xxx") Sheets("Munka1").Columns(oszlopNo).Select Selection.Locked = False Sheets("Munka1").Protect ("xxx") End Sub
Védett munkafüzet tartományai szerkesztésének engedélyezése egyes felhasználók számára
Fontos: Ha egyes felhasználóknak engedélyt szeretne adni a védett munkalap tartományainak szerkesztéséhez, Microsoft Windows XP vagy újabb operációs rendszert kell használnia, és a számítógépnek tartományba kell tartoznia. A tartomány használatát megkövetelő engedélyek helyett jelszót is megadhat valamely tartományhoz.
Jelölje ki a védelemmel ellátni kívánt munkalapot.
Kattintson a Korrektúra lap Változások csoportjában a Tartomány szerkesztésének engedélyezése gombra.
Megjegyzés: Ez a parancs csak akkor érhető el, ha a munkalap nem védett.
Az alábbi lehetőségek közül választhat:
Új szerkeszthető tartomány hozzáadásához kattintson a Megadás gombra.
Korábban megadott szerkeszthető tartomány módosításához jelölje ki a kívánt tartományt a Lapvédelemnél csak jelszóval módosítható tartományok listában, majd kattintson a Módosítás gombra.
Szerkeszthető tartomány törléséhez jelölje ki a kívánt tartományt a Lapvédelemnél csak jelszóval módosítható tartományok listában, majd kattintson a Törlés gombra.
Írja be a Cím mezőbe a zárolni kívánt tartomány nevét.
Írjon a Hivatkozás mezőbe egy egyenlőségjelet (=), majd a zárolni kívánt tartomány hivatkozását.
Tipp Másik lehetőségként kattintson a párbeszédpanelt összecsukó gombra, jelölje ki a munkalapon a tartományt, majd a teljes párbeszédpanel ismételt megjelenítéséhez újra kattintson a párbeszédpanelt összecsukó gombra.
Írja be a Tartományjelszó mezőbe azt a jelszót, amellyel majd hozzá lehet férni a tartományhoz.
Megjegyzés: Hozzáférési engedélyek használatakor nem kötelező jelszót megadni, de ha jelszót alkalmaz, megtekintheti, hogy a tartomány módosításához jogosultsággal rendelkező személyek milyen felhasználói hitelesítő adatokat használnak.
A hozzáférési engedélyek megadásához kattintson az Engedélyek, majd a Hozzáadás gombra.
Írja be az Írja be a kijelölendő objektumok nevét (példák) mezőbe azoknak a felhasználóknak a nevét, akiknek engedélyezni kívánja a tartományok szerkesztését.
Tipp Tájékoztatást kaphat arról, hogy hogyan kell megadni a felhasználóneveket, ha a példák hivatkozásra kattint. A megadott nevek helyességének ellenőrzéséhez kattintson a Névellenőrzés gombra.
Kattintson az OK gombra.
A kijelölt felhasználóhoz rendelendő engedély típusának megadásához jelölje be az Engedélyek mezőben az Engedélyezés vagy a Megtagadás jelölőnégyzetet (vagy törölje annak jelölését), és kattintson az Alkalmaz gombra.
Kattintson az OK gombra, majd a még nyitva lévő másik párbeszédpanel OK gombjára.
Tipp Kérés esetén írja be a megadott jelszót.
Kattintson a Tartomány szerkesztésének engedélyezése párbeszédpanelen a Lapvédelem gombra.
A Minden felhasználónak engedélyezve listában adja meg azokat az elemeket, amelyeket a felhasználók módosíthatnak.
Törlendő jelölőnégyzetMegakadályozandó felhasználói műveletZárolt cellák kijelölése Az egérmutató mozgatása olyan cellákhoz, melyeknél be van jelölve a Cellák formázása párbeszédpanel Védelem lapján a Zárolt jelölőnégyzet. A felhasználók alapértelmezés szerint kijelölhetik a zárolt cellákat.Nem zárolt cellák kijelölése Az egérmutató mozgatása olyan cellákhoz, melyeknél törölve van a Cellák formázása párbeszédpanel Védelem lapján a Zárolt jelölőnégyzet jelölése. A felhasználók alapértelmezés szerint kijelölhetik a nem zárolt cellákat, és a TAB billentyű lenyomásával lépegethetnek a nem zárolt cellák között a védett munkalapokon.Cellák formázása A Cellák formázása és a Feltételes formázás párbeszédpanelen található beállítások módosítása. Ha a munkalap védetté tétele előtt feltételes formázást alkalmazott, az ennek megfelelő változások továbbra is megtörténnek, ha egy felhasználó valamely más feltételt kielégítő értéket ír be.Oszlopok formázása Az oszlopok formázására vonatkozó parancsok használata, beleértve az oszlopszélesség módosítását és az oszlopok elrejtését is (Kezdőlap lap, Cellák csoport, Formátum gomb).Sorok formázása A sorok formázására vonatkozó parancsok használata, beleértve a sormagasság módosítását és a sorok elrejtését is (Kezdőlap lap, Cellák csoport, Formátum gomb).Oszlopok beszúrása Oszlopok beszúrása.Sorok beszúrása Sorok beszúrása.Hivatkozások beszúrása Új hivatkozások beszúrása, beleértve a nem zárolt cellákba történő beszúrást is.Oszlopok törléseOszlopok törlése.
Megjegyzés: Ha az Oszlopok törlése beállítás védelem alatt áll, az Oszlopok beszúrása azonban nem, a felhasználók beszúrhatnak oszlopokat, melyeket aztán nem tudnak törölni.
Sorok törléseSorok törlése.
Megjegyzés: Ha a Sorok törlése beállítás védelem alatt áll, a Sorok beszúrása azonban nem, a felhasználók beszúrhatnak sorokat, melyeket aztán nem tudnak törölni.
Rendezés Az adatok rendezésére szolgáló parancsok (Adatok lap, Rendezés és szűrés csoport).
Megjegyzés: A felhasználók e beállítástól függetlenül nem rendezhetnek zárolt cellákat tartalmazó tartományokat a védett munkalapokon.
AutoSzűrő használataA legördülő lista használata a tartományszűrés módosításához AutoSzűrők alkalmazása esetén.
Megjegyzés: A felhasználók e beállítástól függetlenül nem alkalmazhatnak, illetve nem távolíthatnak el AutoSzűrőt a védett munkalapon.
Kimutatások használata Kimutatások formázása, elrendezésük módosítása, kimutatások frissítése vagy egyéb módosítása, illetve új kimutatások létrehozása.Objektumok szerkesztéseAz alábbi műveletek:
Módosítások elvégzése azokon a grafikus objektumokon (beleértve a térképeket, beágyazott diagramokat, alakzatokat, szövegdobozokat és vezérlőelemeket), amelyeknek a zárolását nem oldotta fel a munkalap védetté tétele előtt. Ha például egy makrót futtató gomb található egy munkalapon, a felhasználók a gombra kattintva futtathatják a makrót, nem törölhetik azonban a gombot.
Beágyazott diagram módosítása, például formázása. A diagram továbbra is frissül a forrásadatok módosítása esetén.
Megjegyzések írása vagy szerkesztése.
Esetek szerkesztéseAz elrejtett esetek megtekintése, azoknak az eseteknek a módosítása, amelyekre ezt letiltotta, és ezen esetek törlése. A felhasználók módosíthatják a változó cellák értékét, ha a cellák nincsenek zárolva, és megadhatnak új eseteket.
DiagramlapelemekBejelölendő jelölőnégyzet Megakadályozandó felhasználói műveletTartalomA diagram részét képező elemek módosítása – ilyenek például az adatsorok, a tengelyek és a jelmagyarázatok. A diagram továbbra is megjeleníti a forrásadatok módosításait.ObjektumokA grafikus objektumok megváltoztatása (például alakzatok, szövegdobozok és vezérlőelemek), amennyiben a diagramlap védelme előtt a zárolás alól nem oldotta fel az objektumokat.
Írjon be egy jelszót a Jelszó a védelem feloldásához mezőbe, kattintson az OK gombra, majd megerősítés végett ismét írja be a jelszót.
Megjegyzések:
A jelszó megadása nem kötelező, ha azonban nem ad meg jelszót, bármely felhasználó megszüntetheti a munkalap védelmét, és módosíthatja a védett elemeket.
Olyan jelszót válasszon, amelyre emlékezni fog, ellenkező esetben nem tud hozzáférni a munkalapon lévő védett elemekhez.
Megjegyzések
Ha egy cella több tartományba is beletartozik, a cellát az adott tartományok bármelyikének szerkesztésére felhatalmazott felhasználók módosíthatják.
Ha egy felhasználó egyszerre több cellát próbál módosítani, és csak néhány cellára vonatkozik a jogosultsága, a program kéri, hogy a cellákat egyenként jelölje ki és változtassa meg.
A 3 területet elnevezed a 3 felhasználó nevével. Ugyanezt a 3 nevet megadod egy érvényesítésben. Az érvényesítést én az F1 cellába vittem be.
A védelem menüpontban a "Tartomány módosításának engedélyezése" almenüben egyenként megadod a 3 tartományt, a hozzájuk tartozó jelszavakkal együtt. A jelszavak ne egyezzenek meg az elnevezett területek nevével.
A laphoz rendeled az alábbi makrót:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$1" Then ActiveSheet.Protect UserInterfaceOnly:=True Cells.Locked = True Range("F1").Locked = False Range(Target.Value).Locked = False End If End Sub
Az F1 cella értékének változásakor a makró levédi a lap összes celláját, majd megszünteti a zárolást az F1 cellában, és az érvényesítésben kiválasztott nevű tartományban.
Ha nem az érvényesítésben kiválasztott ember tartományába akarnál írni, meg kellene adnod annak a tartománynak a jelszavát.
Én csak egy olyat tudnék csinálni, hogy az egész lap védve van, kivéve az a1 cella. Ide kéne beírni a személyes jelszót, majd indítani az általános írásvédettséget megszüntető makrót, ami csak a személyes jelszó szerinti oszlopokat teszi hozzáférhetővé.