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.
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i Else: figyel = i End If End If Next i
Ezt én úgy értelmezem, hogy nem pihenőnap nem lehet több, vagyis ha a sor elején több nem P-s cella van, az sem jó. Mondjuk csak a 8. napot akarják kiadni szabadnapnak.
Nem értem. A nem "P"-t tartalmazó cellákat miért kellene színezni? A feladatban nem az van, hogy a "P"-k közötti cellákat kell színezni, ha az több mint 6?
Ez nagyon jól néz ki, de ennek is az a hibája, hogy a sorok elejét és végét nem rúzsozza ki.
Ha megoldod ezeket, nem bajlódom az enyémmel, úgyis csak este felé leszek számítógép közelében. Az is jó, hogy eseményt kezelsz, nem kell külön indítani.
Az én makrómnál a sor eleji ellenőrzéshez a Next oszlop mögé be kell tenni a t=False sort.
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then Select Case figyel Case 0 figyel = i Case Else If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i Else: figyel = i End If End Select End If Next i
Set r = Intersect(ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllValidation), ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible))
If Intersect(ActiveCell, r) Is Nothing Then MsgBox "Cell has no validation"
Else MsgBox "Cell has validation"
End If
End Sub
Szerintem ha a fenti Activecell object helyett a worksheets(akarmennyi).usedrange objectet használod, akkor is működik (azt nézi meg, hogy van-e közös halmaza két range-nek, a range-ek akármekkorák lehetnek).
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then Select Case figyel Case 0 figyel = i Case Else If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i End If End Select End If Next i
For sor = 1 To usor For oszlop = 1 To uoszlop If oszlop > 5 And t = False And Cells(sor, oszlop) = "P" Then Range(Cells(sor, 1), Cells(sor, oszlop - 1)).Interior.ColorIndex = 3 kezd = oszlop + 1 End If
If Cells(sor, oszlop) = "P" And t = False Then kezd = oszlop t = True 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
Azt hittem egyszerűbb a feladat, de lehet hogy csak nekem tűnik bonyolultnak amiket írtok. Mindenesetre örülök és köszönöm, hogy foglalkoztok vele és próbáltok segíteni:)
Lefuttattam a makrót, az első 5 sorban ki is pirosította a hibát(szándékosan tettem bele párat:)), de a többin nem jelzi a problémát, majd a 36. sorban ismét pirosított:)
Azt hiszem el kezdek komolyabban foglalkozni a makrókkal:)
Csak tippelek, de azt gondolom, hogy a delete előtt akad el a kivitelezés.
VBA benéz a fiókba, turkál mert keresi a Validation object-et. Nem találja, panaszkodik.
Annyi esze nincs, hogy észrevegye, hogy úgyis törölni akarod, szóval lényegében nem számít, hogy nincs. Mivel a VBA nem a lényeget nézi, hanem a formális parancsot, kiakad.