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.
Tehát a változó neveit felsorolom egymás alatt egy-egy cellában, és az éppen aktuális változó értékét szeretném igazra állítani (azaz a cella tartalma és a változó nevei megegyeznek). A tömb sajnos nem jó, mert később ezt logikai egyenletekben szeretném felhasználni és a változó neve sokkal-sokkal beszédesebb, mint a tömb egy-egy elemére hivatkozás.
Egy egészen alapvetőnek látszó feladatot nem tudk megoldani. Munkalapokat másolok át egy kész munkafüzetből. Az egyik munkalapon háromszázvalahanyadik sor látszik. Ugyanakkor a lekérdezésekkel kiderül, hogy valójában az A1 az aktív. Viszont ez nem látszik
A későbbi panel rögzítéshez szükségem lenne, hogy az első sort lássam, mert az N3 cellán állva szeretném a rögzítést.
Kiválasztani, írni bele, olvasni, minden további nélkül tudnék, de képtelen vagyok elérni, hogy ráálljon a vezérlés.
A ws.Range("A1").Select parancs ellen nem tiltakozik, csak éppen nem áll rá.
Kézzel persze meg tudom oldani, de programból kellene. Már órák óta keresgélek, de nem találok megoldást.
Mi lehet az oka annak, hogy a VBA program alábbi utasítása néha nem törli a teljes tartományt?
MthSheet.Rows("1:13").Delete
Fizikailag ugyanarra a munkalapra ráeresztve kb 5-ből egyszer nem 13, csak 12 sort töröl, és hogy cifrázzam a dolgot, a "bennfelejtett" sor mindig a hajdani tizedik.
Az alábbi verzió pontosan ugyanígy önállóskodik:
MthSheet.Rows("1:13").Select
Selection.Delete
A 10-es sorban természetesen nem találok semmi extrát (az a sor amúgy üres is eredetileg, csak a teszteléshez felöltöttem mind a 13 sor első celláját, hogy lássam, melyik ragad bent) - arról nem beszélve, hogy "többnyire" azzal a sorral is megbirkózik.
Egész megdöbbentő és érthetetlen jelenséget tapasztaltam programírás közben:
Oszlopszámokból képzek oszlopneveket a következő függvény segítésével (az elvet Jimmytől kaptam évekkel ezelőtt):
Function oszlopnev(oszlszam As Long) As String Dim cellastring As String cellastring = Cells(1, oszlszam).Address(rowabsolute:=True, columnabsolute:=False) oszlopnev = Left(cellastring, InStr(cellastring, "$") - 1) End Function
Évek óta használom, tökéletesen működik. Igazából most is, csak meglepetésemre az eredményt a VBA képernyőn nem jól jeleníti meg.
A cél a 41 és 41, valamint a 36 és 37 oszlopszámok összegét per jellel elválasztva betenni az immediate ablakban látható képletbe egy későbbi számítás alapjául.
Meglepetésemre a "szoveg" változó fölé állva csak a képlet első fele jelenik meg, az immediate ablakban látszik a teljes képlet. Mielőtt az utóbbit lekérdeztem, hosszasan keresgéltem az okát, hogy hol hibáztam el az összefűzést, mire kiderült, hogy a képlet a szándékom szerint sikerült, csak nem látszik.
Érdekes módon az értékadás után a munkalap megfelelő cellájában szintén hibásan jelenik meg a képlet. Később a munkalapon már a jó adat látszik.
Ehhez hasonló összefűzögetést elég sokat csinálok ugyanebben a programban, és mind rendben van, ennek az egynek a kivételével.
Még annyit, hogy karakterenként megnéztem, nincs-e benne valami rejtett karakter, de semmi.
Segítségeteket szeretném kérni, az alábbi excel problémával kapcsolatban. Van egy néhány soros adatbázis, és abból készítenék egy rendszerezett táblázatot, mely hasonlóan néz ki mint egy kimutatás. Nagyon jó is lenne, addig amíg nincsenek azonos rekordok, mert azokat összevonja. Persze a kimutatásnak az a feladata, gondoltam ki lehet valahogy kapcsolni ezt az értékmezők számolásait, de nem sikerült. Tud valaki segíteni ez ügyben, vagy más megoldás is jó lenne, ami hasonlóan néz ki…
Ha létrehozok egy új számformátumot, pl. "db" azt hogyan tudom elmenteni akár hozzárendelni egy kis parancsikont, hogy ne kelljen a későbbiekben újra előállítani?
Nekem az összes táblázatom úgy működik, hogy be van képletezve, és ha sort szúrok be, bizonyos cellákba automatikusan bekerül a képlet, bármiféle makró nélkül. Azt gondolom, hogy azért, mert táblázatként van definiálva.
Egyébként most is azt csinálom, hogy amikor beszúrom a sorokat felhúzom a képleteket, hogy átírja a régi rosszat az új jóra, és épp ennek szükségességét akarom elkerülni.
Ha átalakítod az adataidat tartalmazó területet táblázattá (a területen állva Beszúrás, Táblázat), megszűnik ez a gondod.
A táblázattá alakított tartományban 1 cellába beírt képletet az egész oszlop örökli, még a formátumát is, akár az aljára, akár a közepére szúrsz be új sort.
Miért kellene beszúráskor bármit is beírnia az új sorba? Ha az kell. akkor a felette lévő képletet lehúzhatod, vagy az alatta lévőt bemásolhatod. Honnan kellene tudnia az Excelnek, hogy milyen képletek vannak az oszlop többi cellájában, és hogy te azok közül melyiket szeretnéd látni az új sorban? (Az más, hogy te tudod, hogy mindegyik azonos, ő nem tudja)
Egyébként nekem az furcsa, hogy nálad bármit betesz az új sorba. Nem fut véletlenül valami makró a munkafüzetben?
Valamit javult a helyzet, bár így sem az igazi. Az ablakok látszólag egymáson vannak, de nem úgy rögzülnek, mint ahogy az alapállapot volt:
Azért köszönöm.
És bosszantó,hogy erre nem gondoltak Redmondban, vagy ha igen, akkor nem tették elérhetővé. És, hogy az alapállapot visszaállítása csak újrateleptéssel oldható meg.
Tudnátok segíteni abban, hogy miért van az, hogy táblázatokban sor beszúrásakor automatikusan nem azt a képletet írja be, ami az oszlop többi cellájában van, hanem egy korábban használt képletet, mintha beégett volna neki? És ugyanez a helyzet a formázással is, sorok beszúrásakor az új sorokba tesz be automatikusan egy korábbi feltételes formázást.
Illetve ha tudja valaki, hogy ez mitől van, megoldást is tudna rá adni?
Sajnos nincs "alapértelmezés" beállítási lehetőség.
Némi kis macerával ismét beállíthatod a neked kellemes helyzetet.
Javaslat:
1. Jobb egérgomb - hide minden ablakon (benne állva, nem a címén).
2. Egyenként: ablak - view - jobb egérgomb az ablakon mint fent - dockable elől pipa kivéve. Ezután mozgathatod, méretezheted az ablakot. Ha a "helyén van" jöhet a következő ablakra ugyanez.
Excel bezáráskor - ha üres munkalapod volt akkor is megkérdezi - nem kell menteni, megőrzi a beállítást.
A VBA-ban egy rossz mozdulattal elmozdítottam a helyéről a Locals ablakot, aztán, ahogy próbálgattam helyreigazítani (régebben sem sikerült hasonló esetekben) egyre rosszabb lett. Most éppen egymás alatt van a 3 ablak.
Az alapértelmezés, ahogy általában használni szeretem, ez (a laptopomról mentve):
A mostani állapot az asztali gépemen:
Baromi kellemetlen. Létezik, hogy nincs visszaállítási lehtőség az alapértelmezett elrendezésre?
Ha egy cellán belül akarod megcsinálni, akkor természetesen sehogy. Illetve csak makróval. Ugyanis nincs olyan függvény, ami a cella tartalmát módosítja, és visszamásolja saját magára.
Segédoszloppal megoldható:
Ha A1-ben van az adat, akkor a B1-ben a következő legyen