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.
Ezt kell visszaadni "B" munkalap "A" oszlopának minden második sorába. Beépített Függvénnyel úgy, hogy azokat csak kopipasztézni kell minden második sorba a "B" munkalapon.
Nem egészen értem a Delila-féle algoritmus logikáját, szóval nem tudom megmondani, miért nem úgy megy, ahogy kellene.
Az enyém azt csinálja, hogy a munkalap utolsó (és remélhetőleg használaton kívüli) oszlopában véletlenszerűen elhelyez x-eket, és ezt addig csinálja, míg lesz összesen annyi x, ahány sort át akarsz másolni.
Utána az x-szel jelölt sorokat átmásolja egy új munkalapra, végül törli az x-eket a forrás és a cél munkalapról egyaránt.
Ahhoz, hogy a fejléc ne kerüljön bele a szórásba, az egyik sor módosítani kell, így:
Dim XRange As Range, c As Range, db As Long, i As Long Dim wsSrc As Worksheet, wsTgt As Worksheet
Set wsSrc = ActiveSheet
Set XRange = Intersect(wsSrc.Columns(wsSrc.Columns.Count), wsSrc.UsedRange.EntireRow) db = InputBox("Hány sort akarsz másolni?") If db > XRange.Cells.Count Then MsgBox "Az túl sok." Exit Sub End If While Application.WorksheetFunction.CountA(XRange) < db i = Int(Rnd() * XRange.Cells.Count) + 1 XRange(i) = "x" Wend
Set wsTgt = ThisWorkbook.Worksheets.Add For Each c In XRange If c = "x" Then c.EntireRow.Copy wsTgt.Range("A" & wsTgt.Rows.Count).End(xlUp).Offset(1) Next XRange.ClearContents wsTgt.Columns(wsTgt.Columns.Count).ClearContents End Sub
Azért csak F2-re frissül a tiéd, mert simán szöveget adsz át a celláknak. Ha F2-re (stb) enter ütsz, akkor az autmatikus dátumfelismerés helyreteszi. Szerintem.
Az a baj, h ez a kód egy nagyobb makró része, ezért futás közben kéne megcsinálnia a kivonást. De Type mismatch-csel tér vissza a VBA editor. :( Egyébként konkrét számértéket kellene kivonnom belőle, gondolom azért ez a hibaüzenet, mert minden áron szövegként kezeli a dátumom. Kipróbáltam több gépen, 2003-as Excellel is. Ugyanez történik :( Excel beállításait néztem, de nem találtam erre vonatkozóan semmit. Azt nem értem igazból, hogy mitől lesz jó, ha belekattintok (vagy F2), majd elhagyom a cellát (enter, tab vagy máshova klikk az mindegy, mindenhogy jó akkor már).
Sok műveletet kell elvégeznem több adattáblával, amikből további riportokat csinálok. Úgy vagyok vele, h ha már nekiállok egy programnak, akkor a felhasználónak lehetőleg nem hagyok manuálisan elvégzendő feladatot. Szerintem ez a lényege a makróknak :)
Az eredmény a cella bal oldalához van igazítva, tehát olyan, mintha szövegformátum lenne. (A formátuma általános.) Emiatt raktam be a végére a Format-ot az eredménybe, ami teljesen felesleges amúgy (sztem).
A lényeg: ha átállítom szám- vagy dátumformátumra, akkor továbbra is ott marad a bal oldalán a cellának, ezért „Type mismatch” miatt nem tudok vele számolásokat végezni. Ha nyomok egy F2-t vagy duplaklikket a cellán, majd átkattintok másik cellára, akkor azonnal jó lesz a korábban beállított formátum. Nem tudok rájönni, hogy mi a baj, mert a makrórögzítés sem árul el semmit, mert a kód alapján egyszerű értékadásról van szó.
C:\Documents and Settings\(user)\Application Data\Microsoft\Excel\XLSTART
mappában egy personal.xls fájl.
Ha van, töröld ki. Vagy talán jobb, ha átnevezve elmented valahová. Ez a fájl ugyanis általában úgy keletkezik, hogy makrót rögzítesz benne. Azokra meg még szükséged lehet.
Elvileg az normális, ha a háttérben ott van a Personal.xls, de persze nem így, mint neked.
Nálam a hiba abból jött, hogy definiáltam az actuális munkafütetet, ami nyitva van (mivel VBA-ban és personalban dolgoztam ez pont ez a fájl volt), aztán mentettem a makróban az "akutális munkafüzetet", ami a Personal volt.
Ezt a momentumot kell megtalálni és korrigálni a makróbal /remélem jól írtam...javítsatok, ha hülyeségeket beszélek/.
Én kijavítottam, hogy máshogy definiálja az "aktív munkafüzetet" és töröltem a plusz Personal-! az excel folderből.
Talán emlékesztek, hogy kérdezgettem itt a makrókról ezt-azt. Na most úg yelállítottam a dolgokat, hogy jelenleg minden egyes Excel megnyitásakor vele együtt nyílik egy PESONAL.xls fájl is. Miért? Hogy tudom leállítani?
A helyes megoldás beküldői között "Köszönöm"-öt sorsolunk ki!
A "Count" ismert előttem - tehát azt értetted, amire gondoltam. Keresgéltem, de nem találtam használható forrást - alighanem végig kell lépkedni az elemeken és megszámolgatni külön. Aban bíztam,