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.
Hacsak nincs olyan range-ed aminek az A2 nevet adtad (nem kéne) akkor a szintaktika a következő legyen:
Workbooks(i).Sheets(1).Range("A2").Select
Szerintem a kód írható gyorsabbra, pld a Select-ek elhagyásával.
Az első részben lévő ellenőrzésből is kihagyható a felhasználó input-ja, azt kell ellenőrizni, hogy a nyitott workbook-ok neve megfelel-e az elvárásaidnak. Mivel az egyetlen olyan workbook-nak ami nyitva kell legyen tudod a nevét (a template), akár kódból be is csukhatod a nyitott, de felesleges workbookokat.
Napuff. Most mindenki magára fogja venni. Én is sok mindent tanultam meg itt - de inkább könyvekből, meg angol fórumokon. Ill. prog.hu (Ja és nem csak excel VBE-t)
Ha debugot mondana még le tudnám követni mit vétettem, de így...? Gőzöm sincs.
Nem értem mit kell javítanom...
A makró egy folderból kinyit minden ott lévő fájlt és bemásol egy munkafüzetbe...elméletileg.
Tisztában vagyok azzal, hogy még sokat kell alakítani a makrón, de ez a kód most meglőtt...
Ti értitek mit akar nekem mondani?
Köszi előre is
------------
Sub megnyitás()
respond = MsgBox("Do you have other excel file open?", vbYesNo, "Question:") If respond = vbYes Then MsgBox "Please close all excel files except the temple!" Exit Sub Else
útvonal = "S:AdHoc AnalysisMACROKrisztateszt"
With Application.FileSearch .LookIn = útvonal .FileType = msoFileTypeExcelWorkbooks .Execute For i = 1 To .FoundFiles.Count Workbooks.Open .FoundFiles(i) Next
End With End If
Db = Workbooks.Count
For i = 3 To Db 'azért 3, mert nekem megnyíllik a personalom is Workbooks(i).Sheets(1).Range(A2).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy
Workbooks("Trackcode merge template.xls").Select Sheets("Combine").Select usor = usor = ActiveSheet.UsedRange.Rows.Count Cells(usor + 1, 1).Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste i = i + 1 Next
Próbálok a hozzászólásban iróniát látni (nem a tiédben) - biztosan naív vagyok.
Én úgy látom, hogy a kérdést feltevők nagyobb része egy kövön ül: Valaki megveregeti a vállát a tiéd helyett.
Viszont vannak pofátlansági fokozatok. A csúcsán a kolléga van, mert nem tud semmit - az alján pedig az, aki érti is hogy miről van szó, ha nem érti akkor pedig kitapossa az utat a világosságig bármi áron.
Aki nem foglal helyet ebben a piramisban, az meg segít önzetlenül - mert jó neki is hogy (idegeneknek) megmutatta hogy milyen ügyesokos. Jó a másik félnek is mert: Tanult valamit, vagy épp megveregette a főnöke a vállát.
Egyébként van Rászi-nál egy jó adag szemtelen provokáció is alighanem - viszont simán tükröt tart azok elé, akik kész megoldást adnak, pedig sokszor érezni egy egy kérdésnél, hogy nem kéne (pl. házifeladatosok)
Prog.hu-n ütik az ilyeneket. ( és szerintem nem kell azt írom, hogy "más fórumokon")
Én nem tudtam, hátha más is érdekesnek találja a következő technikát a VBA kódok felgyorsításához:
- a worksheet tartalmát beolvassuk egy VBA változóba (array)
- utána nem a worksheet-tel dolgozunk, hanem az array-el,
- majd a végén az eredményeket visszaírjuk a worksheetbe.
Úgy tűnik, hogy amikor a VBA kommunikál az excellel az meglehetősen lassú, így ez a technika rendkívüli gyorsulást tud okozni!
A cikkben egy sima TRIM függvényt használ és a worksheet-es verzió 25 másodpercig fut le, a fenti array-es tachnika 0,06 (!) másodperc alatt!!!
Nyilván ezt a technikát nem lehet mindenhol használni, de ahol lehet ott úgy tűnik nagyon durván felgyorsítja a futást, ha az excel-lel történő kapcsolattartást minimalizáljuk.
A hiba: a lapok összemásolásánál lehagyja egy-egy lap utolsó sorát a program. Ez azért van, mert amikor az új munkafüzetbe másol, akkor megkeresi az éppen aktuális (a másolás utáni) utolsó sort, és annak megfelelően rakja oda az új lap adatait. itt azonban elkövettem azt a hibát, hogy az utolsó sor után nem léptettem a számlálót, így "törli" (merthogy rámásol) az új lap első sora az előző utolsóját. Ezért a programot az alábbiak szerint kell változtani (kézzel be tudod írni a kódba, csak odakattintasz az egérrel: egy "+1"-et kell beírni):
Az eredeti kérdésben (13338) kifejezetten stringek szerepelnek a második oszlopban. Ha az FKERES hamis ága 0, a függvénnyel kihozott érték 0 (szám) lesz, ha a segédtáblában nem szerepel az A oszlop értéke, és ez zavaró lehet.
Az is igaz viszont, ha a hamis ág "", a felhasználó esetleg nem veszi észre, hogy nem szerepel a B oszlopban a függvény. :)
Úgy néz ki rendben van a dolog, már csak egy kis formázgatás van hátra. Utána pedig megyek a főnökhöz learatni a babérokat. Remélem nem gond, ha nem dicsekszem vele, hogy külső segítség is kellett.
Rendes volt tőled, hogy így ismeretlenül segítettél.Mégegyszer köszönöm.
Én nem vettem észre semmit, ezért elárulhatnád hogy mit kell látnom.
Jajaa, megcseréltem - de rájött volna magától is. Egyébként 2007-es excelben felesleges ez a módszer(HAHIBA() Meg tényleg előbb írtad, csak én nem olvastam végig a tiédet. Ügyes vagy :)
Robbantómesternek teljesen igaza van a ha(hibás...), ill. a hahiba(...) függvénnyel. A végükön lévő 0 helyett inkább ""-et (üres stringet) írnék, de ez ízlés kérdése.
Kipróbáltam, a 2007-es verziónál csak a 17-18-ik beírt adat után hajlandó a következő sorban önállóan hozni az előző sor képletét.
Megnéztem ezt az adattartomány végi beállítást, alapértelmezetten bejelölt nálam, de nem folytatta sem a formázást, sem a képletet. Korábban azt a megoldást használtam hasonló esetekben (ha ugyanarra gondolunk), hogy bevittem az egész képlet elé egy HA függvényt, megadva, hogy ha semmi sincs a cellában, akkor semmit se jelenítsen meg, ha ez nem igaz, akkor pedig jöhet a másik függvény (ez esetben FKERES). Így tudtam elkerülni, hogy az egész adattáblában a 3200. sorig hiányzik-hiányzik-hiányzik hibaüzenet szerepeljen, viszont ha folytattuk az adatbázist, akkor automatikusan kitöltötte a kérdéses oszlopokat is.
Konkrétabban a példánál maradva:
=HA(A5="";"";FKERES(A5;U:V;2;0))
Ennek a kiküszöbölésére volna az adattartomány végén a formázás/képletek folytatása lehetőség bejelölése? (Nem tudom, számít-e bármit, de 2007-es Excellel dolgozom.)
A Súgó sok szempontból hasznos és az elmúlt órákban elég sok részét el is olvastam, csak sajnos épp az Exceles alapműveltség hiányzott a maradéktalan felfogásához, ennek köszönhetően vagy másfél órát szűköltem többek között az FKERES függvénnyel, de egyszer se sikerült korrektül megírnom a legbugyutább példát használva sem. Szóval a mai nap kiteljesedését tényleg a Ti segítségetekkel értem el, ráadásul a most használt képlet konkrétan negyede annak, amit én a(z) (F)KERES, HA és VAGY függvényekből összetákoltam. :) Ha esetleg tanítjátok is az Excelt, szívesen elküldöm e-mailben a mintáját, elrettentésül másoknak a "hogyan ne" tanfolyamra. ;))
Arra, hogy az U:V tartomány 2. oszlopából adja vissza az értéket, amit az U oszlopban megtalált. Olvasd el a súgó ide vonatkozó leírását, biztosan többet segít.
Boraka és Robbatómester, Nektek is nagyon köszönöm, most már tényleg mindent értek (ebben a témában legalábbis). Az pedig külön öröm, hogy a tippek működnek is. :-)