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.
Ez azért van, mert a különböző sorokban nem ugyanabban a tartományban keresel. Hasonlitsd csak össze az az 1-2-3 sorba beírt képleteid tartományhivatkozásait.
Van egy oszlopban (A) egymás alatt dátumok. 2012.01.01. 2012.01.01. 2012.01.01. 2012.01.01. 2012.01.03. 2012.01.03. 2012.01.03. 2012.01.04. 2012.01.04. 2012.01.04. 2012.01.04. Nekem kellen egy olyan függvény, amely visszaadja az adott oszlopban lévő első dátum cellájának a sorszámát, vagyis hogy melyik sorban van. Pl. Keresem a 2012.01.01. első helyét: A függvény az 1-t adja vissza. Pl. Keresem a 2012.01.03. első helyét: A függvény az 5-t adja vissza. Pl. Keresem a 2012.01.04. első helyét: A függvény az 8-t adja vissza.
Megoldottam a fejléc problémát. Beállítottam, hogy alaphelyzetben a 2. sortól kezdje az értékelést az utolsó sorig. De lehetővé tettem, hogy a program elején magad is tudd módosítani ezeket az értékeket, ha szükséges.
Az általad jelzett hiba nálam nem jelentkezett, ezért a biztonság kedvéért újra küldeném a teljes programszöveget. Viszont nem szeretném az itteni fórumot terhelni ismételten egy hosszú programmal, ezért a Megoldottam a fejléc problémát. Beállítottam, hogy alaphelyzetben a 2. sortól kezdje az értékelést az utolsó sorig. De lehetővé tettem, hogy a program elején magad tudd módosítani ezeket az értékeket, ha szükséges.
Nem szeretném az itteni fórumot terhelni ismét egy hossú programszöveggel, ezért a data.hu segítségével szerettem volna elküldeni azt. Viszont valami szinkronizációs hiba miatt nem fogadja a data.hu a feltöltött adatokat. Vagy várunk vele holnapig, hátha javítják a hibát, vagy ha adsz egy email címet, akkor küldöm a programot.
A te makródból is kiszámolható az időszakok napban (orak száma/12), a networkdays-szel is kiszámolható, a kettő különbsége az ünnepnapok száma, ezt szorozza 12-vel és levonja a makróddal számolt órákból.
Holnap megnézem. A hibákra fel voltam készülve, ezt jeleztem is, hogy ilyenek sajnos még előfordulhatnak. A kezdő sorszámot is javítom. Sőt e befejezőnél is lehetővé teszem, hogy magad állítsd be.
A következőben kért ünnepnapokat nem tudom vállalni. Ez már túl bonyolult lenne. Legalábbis nekem:-))) Ezt függvénnyel már utólag talán lehet kezelni.
Még egy dolog, ami befolyásoló tényező a számolásnál.
Olyan megoldás lehetséges, hogy a makró a futtatásnál első lépésként megkérdezi, hogy melyik napokat állítom be ünnepnek, és akkor azokon a napokon egyáltalán nem számol semmit?
Tudom ez már elég macerás, de már annyira jól működik, hogy ha még az ünnepnapokat is tudja kezelni, akkor már tényleg tökéletes lesz :)
Lefuttattam a makrót és néhány azonos időpontnál kiírja, hogy "A kezdo es befejezo idopont azaons", de soknál valamiért negatív számot ad eredményül.
A képen látszik, hogy ahol a fókusz van, ott értelemszerűen jelzi a program, hogy egyezik a két dátum, ezért 0 kerül a cellába, viszont felette jópár cellában is egyeznek az adatok, de oda valamiért negatív számokat számolt.
Erre rá tudnál még nézni?
Illetve, ha szeretnék oszlopfeliratokat az első sorba, akkor nem tudom futtatni a makrót, erre is van vmi megoldás?
Szerintem ezzel nincs semmi különösebb teendőd. Erről az Excel gondoskodik. Kipróbáltad egyáltalán?
Ha nem, akkor készíts egy egyszerű fájlt forrás1 néven egyetlen adattal az A1-ben. Aztán egy forrás2 nevűt egy adattal az A2-ben. Aztán egy összesítő nevűt, amelynek A1 cellája a forrás1-ből az A1-et, az A2 a forrás2-ből az A2-t tartalmazza. Az egészet helyezd a C:munka könyvtárba.
Aztán az intézővel másold át a könyvtárat a D:-re, vagy egy pendríve-ra, majd nyisd meg ott az összesítőt. Az Excel figyelmeztet, hogy frissíteni kell a hivatkozásokat. És ha elfogadod, akkor megcsinálja helyetted.
Kösz. Erre a módira magam is rájöttem, de elképzelhetetlennek tartottam, hogy ne lenne vmi lokális megoldás. Aztán miután tegnap felraktam a pancser kérdést, váratlanul rábukkantam a byref-re. (Elég nehéz keresés volt). Most kb 80%-ban fogom, ennyi remélhetőleg elég lesz hogy teljesen domesztikáljam. Meg retro iménti javaslatát még, hogy függvényesítsem.
Készíteni kell egy olyan makrót, ami az összesítő kinyitásakor automatikusan lefut.
1.) Ez a makró kiolvassa, hogy hol van az Összesítő jelenleg, ebből a filenév levágásával elő kell állítani a Munka elérési útvonalát
2.) Ki kell olvasni a workbookban lévő összes Link elérési útvonalát (ActiveWorkbook.LinkSources method)
3.) Az ActiveWorkbook.ChangeLink használatával meg kell változtatni a régi útvonalakat az Összesítő megnyitásakor kiolvasott útvonalra.
Vagy ha ez csak egyszeri változás, akkor az 1. pontban nem minden megnyitáskor lefutó makrót kell írni, hanem csak "normál" makrót amit a file-ok másolása után kell lefuttatni manuálisan.
Üdv! Adott egy Excel táblázat (Összesítő), ami különböző Excel fájlokból (Forrás1, Forrás2...) vesz adatokat hivatkozásokkal. Mindegyik azonos mappában (Munka) van. Megoldható-e, és hogyan, hogy a Munka mappa más meghajtóra vagy egy másik mappába való másolása esetén az Összesítő táblázat hivatkozásai automatikusan megtalálják a forrás táblázatokat? A forrás fájlok rendszeresen felülíródnak új adatokkal, az Összesítő számol az aktuális adatokkal, majd a Munka könyvtárról szeretnék másolatot készíteni, ill archiválni úgy, hogy ne kelljen kézzel átnevezni, másként menteni vagy hivatkozásokat módosítani.
Az alábbi - általam nagyon nehezen megtalált - formátumkód kapcsán kérem a segítségeteket! Tud valaki egy olyan forrást, ahol az Excel cellaformázási kódok összeszedve, elmagyarázva megtalálhatók? Mert nekem minden egyes ilyen probléma megoldása több órás keresgélést jelent. A google ebből a szempontból nem segített, sem angolul, sem magyarul. Az Excel cellaformázás parancsánál vannak ugyan felsorolt példák, de nincs hozzájuk magyarázat, így nem mindig sikerül rájönnöm, hogy melyik milyen célt szolgál.
Szóval egy alapos forrásmunkáért nagyon hálás lennék.
Nagy nehezen megtaláltam a megoldást. Kiderült, hogy ahhoz, hogy az óra értéket megtartsa 24 óra után is, formázáskor az óra (illetve angol hour) kezdőbetűjét szögletes zárójelbe kell tenni. Ennek megfelelően a munkaórák szubrutin végén levő két sort a következőképp írd át:
ez volt:
Cells(aktsor, céloszlopszám).NumberFormat = "@" ' ezzel lesz string a cellaformátum, …
Cells(aktsor, céloszlopszám).HorizontalAlignment = xlRight ' és jobbra pozícionáljuk
Ezek közül az első sor helyére írd a következőt:
Cells(aktsor, céloszlopszám).NumberFormat = "[h]:mm" ' ezzel lesz óra:perc a cellaformátum
a második sort pedig töröld ki, vagy egyszerűen írj az elejére egy aposztrofot (ez jelzi hogy ez nem programsor, csak megjegyzés)
És ha majd számolni akarsz ezekkel, akkor abban a cellában, ahova a képletet írod, a cella formátumát állítsd át egyénire, és formátumkódnak a [ó]:pp kódot írd!
Technikailag így van, de azért a globális/public változót csak nagyon korlátozottan célszerű használni. Én lényegében a konstanssal rokonnak tekintem, annyi különbséggel, hogy míg a konstans a programkódban kap fix értéket, a public változó pedig a program elején, bizonyos körülményektől függően, de onnan kezdve nem változik.
Arra nagyon nem javaslom a használatát, hogy megkerüljük vele a paraméter átadást függvénynek, vagy subrutinnak, mert előbb-utóbb áttekinthetetlenné válik, hogy az adott változó értéke hogyan alakul.