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.
Egy olyan dolgot kellene holnapra meggyinálnom, ami szerintem pofonegyszerű, csak nekem nincs meg a rutinom.
Van egy terméksor, bizonyos időközönként árazva, a sorok végén eg oszlopban pl =E6+G6+I6+K6+O6+Q6+S6+U6+W6+Y6 ... egyenlet mutatja az aktuális összeget.
Eszerint a sorvégi összeg szerint szeretném csökkenő sorba tenni úgy, hogy a saját egész sorait is vigye magával, ne csak az összeg oszlopát.
Biztos értitek... Előre is kösz a segítséget, Karna
Ez azt csinálja, hogy egy adott mappában lévő összes .xls kiterjesztésű fájlt megnyitja, és azok első munkalapját átmásolja abba a munkafüzetbe, amelyikben a makró fut. Érdemes ezért egy új munkafüzetbe tenni a makrót, továbbá összegyűjteni a forrásfáljokat egy mappába, és ezen mappa teljes elérési útvonalát megadni a kód alábbi sorában:
Nem feltétlenül, mert most hogy utánagúgliztam, találtam azért panaszkodást usedrange ügyben.
Azt olvastam, ha csinál az ember egy usedrange.rows.count-ot (v. menti a workbook-ot) akkor a usedrange elfelejt minden múltbeli cuccot, reseteli magát és a tényleges usedrange lesz.
Igen, ezt a különbséget én is észrevettem. Meg mást is. Ha például egy vadiúj, üres munkalapnak mondjuk a G6-os cellájába beírsz egy tetszőleges értéket, aztán kitörlöd, a Te programod szerint a UsedRange G6-on lesz, és ezáltal a munkalap nem-üresnek minősül. Ez szerintem nem annyira jó.
Igazából nem értem teljesen, hogy ez a UsedRange hogyan is működik, azért nem is szoktam használni..
Nagyon szépen köszönöm a While-os válaszod, kevéske tudásom alapján erre tippeltem én is.
Ez utóbbi függvényedet teszteltem. Én ezt a programot arra használom, hogy a teljesen üres munkalapoktól megszabaduljak. A két lehetőség abban eltér, hogy a függvényed minden esetben üresnek mondta a munkalapot, ha a cellák üresek voltak. A másik program (ami egyébként nem az én munkám gyümölcse) viszont ha a háttérszín, vagy cellaszegély be volt állítva, vagy valamelyik cella megjegyzést tartalmazott, akkor már nem tekintette üresnek a lapot.
Function Üresmunkalap(WS As Worksheet) As Boolean If WS.Cells.Count = Application.WorksheetFunction.CountBlank(WS.Cells) Then Üresmunkalap = True End Function
Ha a kifejezés értéke igaz, a teljes ciklusmag végrehajtódik, aztán a kifejezés újra kiértékelésre kerül. A ciklus mindaddig megy, amíg a kiértékeléskor True az eredmény. Amint egy kiértékeléskor False eredmény jön ki, a futás a Wend utáni első utasításon folytatódik.
Nem tudnám egzakt módon meghatározni a különbséget, de biztosan van, ha egyszer mindketten léteztnek...
Annyi bizonyos, hogy a Do..Loop ciklusból középen is ki lehet lépni (pl. egy feltétel kiértékelése után) az Exit Do paranccsal, míg a While..Wend ciklusban ilyen lehetőség nincs. A Help azt írja, hogy a Do..Loop utasítással rugalmasabb és strukturáltabb ciklusokat lehet írni. Abban is biztos vagyok, hogy amit While...Wend ciklussal meg lehet oldani, azt Do..Loop-pal is meg lehet, szóval az előbbit nem kell bevenned a repertoárba.
A magam részéről ezt szoktam meg, és csak akkor használok mást, ha ezzel nem tudom megoldani, amit akarok. Nem emlékszem, hogy az utóbbi 3-4 évben használtam volna Do...Loop ciklust.
Ha érdekel a téma, akkor itt egy progi, ami megvizsgálja, egy munkafüzetben, hogy üres-e a munkalap.
Dim EgyCella As Boolean Dim A1EsCella As Boolean Dim A1Ures As Boolean Dim lap As Object
For Each lap In Worksheets EgyCella = lap.UsedRange.Cells.Count = 1 If EgyCella Then A1EsCella = lap.UsedRange.Address = Cells(1).Address A1Ures = lap.Cells(1) = "" If EgyCella And A1EsCella And A1Ures Then 'üres a munkalap
Ezt While ciklust eddig nem ismertem. Illetve ismertem csak nem VBA alatt. VBA-ban én mindig a Do …. Loop ciklust használtam.
Az angol tudásom elég kezdetleges. Ez a While ugyan az és ugyan úgy működik, mint a Do … Loop? (Már amennyiben ez utóbbinál is előre írom a feltételt, mert azt látom hogy a While-nál nem lehet a végén a feltétel.) Vagy van valamilyen különbség a kettő között?
Igen, lehetne még cifrázni, mert ez csak egy kezdetleges változat.
Ha például a cél munkafüzet ugyanabban a mappában van, ahol a forrásfájlok, valószínűleg kiakad a program, amikor önmagát is meg akarja nyitni. Aztán, ha a forrás munkalapokon csatolások vannak, akkor nem tudom mi történik. Aztán az is lehet, hogy a forrásfájlok nincsenek egy helyen, vagy nem Excel formátumban, stb.
Gondoltam, majd ha a kérdező pontosít, én is pontosítok.
Akkor ezzel a képlettel elméletileg a címek másolását is meg tudom oldani, csak a dátum helyére kell más kód és vigyáznom kell, hogy ne maradjon ki üres sor.
Este nekiállok! Kösz még 1x! További szép napot mindenkinek!