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.
Bocs a kései válaszért, mostanában ritkán vagyok internetközelben: Szóval én nem munkafüzet megosztásra akarom használni a jelszót, hanem jogosultságok beállítására. Van, akinek csak betekintési joga lesz, van, akinek írási joga is lesz, másoknak meg semmi.
Lehet más triggerhez kötni, pl. gombnyomás, munkalap váltás, duplakatt egy bizonyos cellára, vagy billentyűkombináció, stb. Akkor nem fut le olyan gyakran, csak amikor akarod.
A Visual Basic Editor bal felső paneljában (Project - VBAProject feliratú ablak) keesd meg a ThisWorkbook objektumot, kattints rá duplán, és a jobbra megnyíló kódlapra másold be a kódot. És ha akarod, részletesen elmondom, mi hogyan van benne.
Sendkeys és Volatile - mindkettő az Excel sokat szidott képességei közé tartozik. Azt gondolom, gyerek kezébe nem adunk töltött puskát, szóval én ezt a megoldást nem támogatom, bocsi. Talán valaki más.
Az F2 + ENTER valóban frissíti a lap összes függvényét, feltéve ha önmagában áll a függvény. Az Application.Volatile már akkor is frissíti, ha további műveletet végzek a függvénnyel, pl. egy szorzó van a függvény mellett.
Most már csak az F2 + ENTERT kellene összehoznom egy OnChange függvénnyel. Ebben kérnék még egy kis segítséget. Sajnos VBA-ben nem nagyon vagyok otthon.
Igen, tudom. De ez max nehany fullel mukodik. Ha azok szama valtozik, akkor mindig frissiteni kell a kepletet. Aztan tobb tucat, szaz fullel (ceges kornyezetben ez siman elofordul) szinte lehetetlen karbantartani egy ilyen kepletet, meg ugye eleganciaja is 0 fele konvergal :)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim rng As Range, c As Range, cParent As Range Dim PreviousValue As Variant Application.EnableEvents = False Set rng = Sh.Cells.SpecialCells(xlCellTypeFormulas) For Each c In rng.Cells If InStr(c.Formula, "szinesdarabteli") > 0 Then Set cParent = c.DirectPrecedents.Cells(1) PreviousValue = cParent.Value cParent.Value = "asdrcfgh" cParent.Value = PreviousValue End If Next Application.EnableEvents = True End Sub
Úgy működik, hogy a
Function szinesdarabteli(tartomany As Range, szinesertek As Integer)
definícióban a tartomany nevű tartomány első cellájának értékét megváltoztatja, és ezzel kikényszeríti az Excelben a képlet újraszámolását. Aztán visszaírja az eredeti értéket. (Amivel újra kikényszeríti a képlet kiszámolását, de ezt nem lehet elkerülni.)
Elvileg új cella kijelölésére indul, és a fenti módszerrel sorban frissíti az aktuális munkalapon az összes szinesdarabteli függvényt tartalmazó képletet.
(Valamilyen eseményhez kötni kellett, és ez a leggyakoribb. A cellaszín változása önmagában nem indít semmilyen folyamatot.)
Mivel a kód az összes cellakijelölés-változáskor lefut, ha sok ilyen szinesdarabteli képleted van, akkor előfordulhat némi lassulás, nem teszteltem ki.
Az a gond, hogy egy lapon nagyon sokszor használom a függvényt. Ráadásul havonta újraszíneződik a lap, és a sorok, így a függvények száma is változhat.
Az első újra beírja függvényt. Tegyük fel a függvényed az a1-ben van:
Range(“a1”).formula =”képlet”
A képletet úgy tudod a legkönnyebben vba kompatibilisen megkreálni, hogy ráállsz a képletet már tartalmazó celládra, majd elinditod a makrórögzítőt az F2 Enter lépések rögzitésére.
A Application.Volatile nem csinál semmit, nem is lassul az Excell (2007), de nem is frissít a függvény.
Nyomógomb vagy billentyűparancsra én is gondoltam, de több lapon több sorban alkalmazva van a függvény. Tudok olyan parancsot adni, amivel a függvény összes előfordulását frissíti?
Ez nem jó, mert nem két fül van, hanem 4-7 között változó (alapból 4, de ha bejön egy ideiglenes dolgozó kampányra, akkor másolunk neki egyet). És ha módosítani kell rajta, mindegyik tagot módosítani kéne.
A másikat majd kiptóbálom a jövő héten, köszi! Bár nem hangzik egyszerűen, de egy próbát megér.
Na de olyat mutass, ahol az összegzendő adatok vannak több munkalapon! Pl. az Összeg fül A2 cellájában levő értéket keresem a Munka1:Munka5!S:S oszlopokban, és a mellette a T oszlopban talált értékeket adja össze az Összeg!B2-ben.
Van egy VB függvényem, melyel lekérdezem egy tartomány cella-háttérszíneit. Pontosabban megszámoltatom, hogy egy bizonyos színből hány darab van. A függvény dolgozik szépen, csak nem frissül, ha utólag módosítom a színeket. Csak akkor számol újra, ha újra beírom, vagy módosítom a lekérdezést.
Ez valami beállítási probléma, vagy egyszerűen így működik a VB? Válaszaitokat előre is köszönöm.
A "Munkalap1" és a "Munkalap2" munkalapok tartalmazzák az adatokat és a "Statisztika" munkalapra kellene az értékesítők szerint a szerződéseket összesítenem. (Vagy a székhely szerint)