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.
Ha esetleg valakinek még ilyen problémája lenne, a jól működő kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If 'For Each MyRange In Range(Tartomány.Address) ' Ez a sor volt a rossz
For Each MyRange In Tartomány ' Így jó If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then ' MinKereso = "Nincs ilyen cellaérték" MinKereso = 0 End If End Function
Esetleg csinálj három képet a háttérképedből az eredeti szétvágásával, és tegyél egy darabot a D3:F4, egyet a C2:C6, egyet pedig az B3:B6 cellákra és tedd egymás mellé őket. :)
Kicsit még nem értem ezeknek az UDF-nek a lelki világukat.
Nem tudom mikor futnak le.
Az én esetemben amikor lefut, akkor az összes munkalapon végigmegy, és számolja a képleteket, és valami oknál fogva az első munkalap tartományban számol, pedig a képlatben nincs munkalap hivatkozás, lehet ez a baj?
Az lett egy megoldás, lehet csak köztes, de így működik, hogy a thisworkbook-ba betettem az sheetactivate-hez egy calculate-ot, ami annyit jelent, hogy minden munkalap váltásnál újraszámol, és frissít mindent szépen!
"Bár biztos megoldható az is amit te szeretnél, txt fájlokat kezelni excelből."
A felülírás nagyon szépen megy (menne), sőt, a tartalmat is össze tudja hasonlítani, hogy egyáltalán felül kell-e írni a fájl tartalmát. De én úgy vettem észre, hogy az Excel (és a VBA) nem nagyon támogatja az ilyen szintű fájlműveleteket... :-(
Külön könyvtárba: ez is egy lehetőség, de szeretnék felhasználóbarát megoldást. ;-)
Írtam egy UDF-et (ez volt az első). Az a baj, hogy nem jól működik!
A kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If For Each MyRange In Range(Tartomány.Address) If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then MinKereso = 0 End If End Function
A kijelölt tartomány minden negyedik cellájáinak a minimumát adja, a nullát kihagyja. A probléma az, hogy ha ez a képlet "=MinKereso(B4:AA4;3)" több munkalapon szerepel, mindig az első munkalap tartományában dolgozik.
A kérdés, hogyan lehet egy UDF-et csak az aktuális munkalapra tartományára hivatkoztatni?
A három pont nálam azt jelenti, hogy "jól van, mondjad csak a hülyeségedet, de most már jó lenne befejezni". (Bocsánat a stílusért (vagy annak hiányáért).)
Általában ez inkoherens a környezetében lévő hozzászólásokkal és inkongruens a közlő szándékával, ezért inkább nem értem, mitsem félreértsem. A szmájli a végén meg teljesen érthetetlenné teszi számomra. :)
Van párszáz fájl (asszem valami 182 körül, de végülis mindegy), amik textfájlok, jegyzettömbben szerkeszthetőek (egy programnak a bemenő adatai, változók értékeit olvassa be belőle).
A fájlok tartalma struktúrált, tabulátorral tagolt. A legkönnyebb Excelben szerkeszteni és makróval kimenteni őket munkalaponként külön-külön fájlba (és ez a gyakorlat is).
Jelenleg az a megoldás, hogy ctrl+A, majd jegyzettömbben beillesztés, mentés. Ez sok változás esetén macerás, makróval gyorsítható.
Ez a makrós mentés szépen megy is, de ha az előző fájl már létezik, megkerülhetetlen külső ok miatt rajta van a read only bit. Ha nem új munkalapot hozok létre, hanem a tartalmát módosítom, akkor nem tudja felülírni a már létező fájlt (meglepő módon :P). Megoldásként le kéne venni róla a read only bitet, majd a kimentés után visszatenni.
Ha nagyon nincs min gondolkodni, nekem lenne egy kérdésem: makróval hogyan tudom egy adott fájlról levenni a read only bitet (és persze visszatenni rá)? (Ha esetleg nem fejezném ki magam elég jól: a batch fájlokból megszokott attrib -r megoldás VBA alapú verziójáról lenne szó.) :) De van esetleg erre valami megoldás?