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.
Az eredeti kérdés "A célja, hogy lelellenőrizze, hogy az adott dolgozónál két pihenő közt nem telik el 6 napnál több."
Itt nincs szó üres, és nem üres cellákról. A makróm nem is figyeli, csak azt, hogy az egymást követő, "P" tartalmú cellák között hány nem "P"-s cella van.
Ha jól olvasom a kódot, akkor nem ellenőrzi, hogy van-e más P 7 távolságon belül, illetve nem ellenőrzi, hogy ha a 7 távolságra lévő cella üres akkor van-e távolabb P-s cella.
Az első esetben nem kell pirosítani, a másodikban igen.
A kód viszont az első esetben pirosít, a másodikban nem.
Mi van, ha a (target.row,i+3)-ik cella is "P"? Akkor nem kell színezni.
Szerintem a "P" betűk a pihenő napot jelentik, és a színezés azért kell, mert nem szabad 2 pihenő nap között 6-nál több napon dolgoztatni a munkavállalókat.
Vagy nagyon elnézek valamit, vagy amit csinál az az, hogy megnézi egy cella tartalmát és ha az P ÉS a tőle 7 cellára levő cella tartalma is P akkor a kettő között pirosít.
Amit én mondok az az, hogy ha egy cella tartalma P és a tőle 7 cellára eső cella tartalma üres, de a nyolcadik cella P, akkor a fenti IF hamisra értékelődik ki, pedig a két P-s cella közötti távolság nagyobb mint 6.
Vagy. A1=P, C1=P és G1=P
Bár itt két szomszédos P közötti távolság sem nagyobb hatnál, de az A1 ellenőrzésekor (tartalma P= true) ellenőrzi a G1-et is (tartalma P= true), látszólag megfelel a kódba épített tesztnek, de mégsem olyan eset amit keresünk.
Én egy Do While-lal megkeresném a vizsgált cella utáni első P-s cellát és összehasonlítanám az oszlopszámukat.
"Azt kellene leellenőrizni, hogy "P" és "P"-t tartalamzó cellák közti cellák száma nem több 6-nál. Amennyiben több jelölje ki a két "P" közti cellákat pirosal."
Mert úgy tűnik, mintha a konkrét cellától számított 7. cella tartalmát nézni, holott ha pld. a 8. cella "P" de a hetedik üres, akkor is pirosítani kell.
Fárszthatlak benneteket még egyszer? /és nem utoljára?
Az alsó kódban minden működik kivéve a banális filter show all, ami normál makróban működik, de ebben a környezetben nem...
WHY?????????????
Db = Workbooks.Count Dim ws As Worksheet
For i = 3 To Db
Workbooks(i).Activate 'Delete hidden sheets a = 1 While a <= Worksheets.Count If Not Worksheets(a).Visible Then Worksheets(a).Delete Else a = a + 1 End If Wend
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" And _ UCase(Cells(Target.Row, i + 7)) = "P" Then Range(Cells(Target.Row, i), Cells(Target.Row, i + 7)).Interior.ColorIndex = 3 End If Next i
Biztos én csinálok valamit rosszul, de ezek a képletek nem jöttek össze nekem. Írtam helyette egy makrót, ami a lapon lévő összes sort, és oszlopot vizsgálja, a "P"-k közötti cellák hátterét pirosra váltja, amennyiben a a darabszámuk eléri, vagy meghaladja a 6-ot.
Sub mm() Dim oszlop As Integer, uoszlop As Integer, sor As Integer, usor As Integer Dim kezd As Integer, veg As Integer, t As Boolean
For sor = 1 To usor For oszlop = 1 To uoszlop If Cells(sor, oszlop) = "P" And t = False Then kezd = oszlop t = 1 GoTo Kov End If
If Cells(sor, oszlop) = "P" And t = True Then veg = oszlop If veg - 1 - kezd > 5 Then Range(Cells(sor, kezd + 1), Cells(sor, veg - 1)).Interior.ColorIndex = 3 End If kezd = veg End If Kov: Next oszlop Next sor End Sub
Én mindig is szerettem ide járni, pont mert mindenki tök normális és segítőkész. /ellentétben pl az access forummal, ahol már annyi idióta okostojással találkoztam/.
Hát pont azért van ez a fórum, hogy segítséget lehessen kérni, nem?
Mindenki jól jár :-), aki kérdez és aki válaszol.
Nem tudom, hogy az itt feltett kérdéseim alapján ez mennyire hihető, de a cégünkön belül /200ember :-), engem képzelnek az
"excel" szakértőnek. Ha kérdésük van mindig hozzám jönnek, főleg hogy tanfolyamot is csináltam az embereknek.
És én ezt konkrétan tök szeretem, mert pl:
1. nagyon okosnak érzem olyankor magam :-))), hogy mindent meg tudok oldani /majdnem :-d/
2. mindig tanulok valami újat
3. tök jó érzés, hogy meg tudom valakinek könnyíteni az életét
4. a hülye monoton feladataim mellett kifejezettem éhezek apró/ vagy nem apró kihívásokra
Szóval mardjon szerintem minden a régiben, ahogy eddig...mindig mindenki segítőkész volt és jófej :-)))