Pozdravljeni,
skozi daljše časovno obdobje smo različni uporabniki vsak v svoj zvezek pisali različne opravljene naloge, ki smo jih po svoji lastni vesti grupirali.
V danem trenutku pa od nas pričakujejo skupen seznam opravljenih aktivnosti. Zedinili smo se na določena poimenovanja skupin nalog in jih bomo v bodoče s pomočjo ustvarjenega seznama in preverjanja veljavnosti pri vnosu tudi uporabljali.
Zatakne se nam pri poimenovanju/grupiranju prejšnjih vnosov.
Vsak od nas bo na podlagi novih/dogovorjenih poimenovanj skupin nalog popravljal svoj seznam, a se nam zatika, saj pri velikemu številu že vpisanih vrstic, kakšno poimenovanje z lahkoto zapišeš narobe, ne bi pa želeli v nedogled popravljati starih seznamov. Spustni seznam sam po sebi pa je pri 50 – 100 različnih poimenovanj zelo neroden za uporabo.
Na spletu (http://www.ozgrid.com/forum/showthread. ... 900&page=1) sem našel rešitev in jo dopolnil tako, da napake obarva rdeče. Ne znam pa ustaviti izvajanja zanke, če je celica, znotraj področja, ki ga makro preverja, prazna ali pa ima zapisano kakšno formulo, ki celico "pokaže" prazno (npr. if(D2="";"";…).
Prav tako ne znam definirati, da naj se, po filtriranju po barvi teksta, aktivira celica, v kateri je bila najdena prva napaka.
Prilagam kodo in prosim za pomoč.
Hvala in Lp,
Fatso
[code]Sub CheckValidation_1()
' zasnova vzeta od "http://www.ozgrid.com/forum/showthread. ... 900&page=1" (#1)
'
' zaslon se ne osvežuje (ne blinka)
Application.ScreenUpdating = False
' določitev potrebnih spremenljivk
Dim Cell As Range, bErr As Boolean '(#1)
' začetek zanke
For Each Cell In ActiveSheet.UsedRange 'preveri vsako celico v obsegu za preverjanje veljavnosti podatkov
If Not Cell.Validation.Value Then 'če je napaka
Cell.Select 'izbere celico
bErr = True 'in postavi napako
Selection.Font.Color = -16776961 'pobarva tekst rdeče
' ne pozabi zakomentirati v "produkciji"
If MsgBox("Podatek v celici '" & Cell.Address(False, False) & "'" & vbCrLf & _
"ni v skladu z dogovorjenim." & vbCrLf & vbCrLf & _
"Nadaljujem s preverjanjem?", _
vbYesNo) = vbNo Then GoTo Filtriraj
End If
Next
If Not bErr Then MsgBox "Vsi opisi v stolpcu 'Kaj' so OK." 'če ni nobene napake ...
Filtriraj:
' naredi filter na tekst ki je napisan z rdečo
ActiveSheet.Range("$A$98:$H$1160").AutoFilter Field:=5, Criteria1:=RGB(255 _
, 0, 0), Operator:=xlFilterFontColor
' se postavi na celico v naslovu
Range("E98").Select
' zaslon se osvežuje (blinka)
Application.ScreenUpdating = True
End Sub[/code]
Preverjanje pravilnosti že vnesenih podatkov
Re: Preverjanje pravilnosti že vnesenih podatkov
Pozravljeni,
Če grem po vrsti:
Če grem po vrsti:
- Ali celica vsebuje formulo ugotovite tako, da preverite lastnost HasFormula, ali je prazna pa tako da njeno vrednost pač primerjate z praznim nizom, torej
Koda: Izberi vse
if (cell.HasFormula OR cell.value = "") Then .... ' tu obravnavate celice, ki so prazne ali imajo formulo Else .... ' tu pa celice, ki nimajo formule in niso prazne End If
- Aj ko boste filtrirali po barvi (pozor to zna samo novejši Excel!) bost imeli viden vse napake in vam ni potrebno nič pozicionirati. Oz. Ker bodo napake filtrirane, bo prva napaka pač v celici takoj pod filtrom, torej v celici E98. kamor ste uporabnika pozicionirali tudi vi.
- Pred 'Filtriraj:' dodajte še 'Exit Sub', saj vam bo makro sicer vedno poskušal filtrirati napake, četudi bi vi ugotovili, da ni nobene napake...
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Preverjanje pravilnosti že vnesenih podatkov
Dober dan,
hvala lepa za kodo in nasvete.
V točki 1. vašega odgovora, sem uporabil priloženo kodo. Vem, da se tak način (ob napaki preskoči) odsvetuje, a sem za kaj drugega prekratek. Prosim za nasvet.
[code]
For Each Cell In ActiveSheet.UsedRange 'preveri vsako celico v obsegu za preverjanje veljavnosti
If (Cell.HasFormula Or Cell.Value = "") Then 'če je v celici formula ali je prazna
' tu obravnavate celice, ki so prazne ali imajo formulo
On Error Resume Next 'gre naprej
ElseIf Not Cell.Validation.Value Then 'če je napaka
Cell.Select 'izbere celico
bErr = True 'in postavi napako
Selection.Font.Color = -16776961 'pobarva tekst rdeče
' ne pozabi zakomentirati v "produkciji"
' If MsgBox("Podatek v celici '" & Cell.Address(False, False) & "'" & vbCrLf & _
"ni v skladu z dogovorjenim." & vbCrLf & vbCrLf & _
"Nadaljujem s preverjanjem?", _
vbYesNo) = vbNo Then GoTo Filtriraj
End If
Next
[/code]
In še nevezano na temo v naslovu.
Kaj delam narobe oziroma kaj nimam pravilno označenega pri nastavitvah, da vsem ostalim kodo pokaže v ločenem okencu, meni pa jo pokaže znotraj vprašanj/teksta? Predno vnesem kodo kliknem na gumb "Code" in potem med "[code]" in "[/code]" kopiram kodo iz makra.
Hvala in Lp,
Fatso
hvala lepa za kodo in nasvete.
V točki 1. vašega odgovora, sem uporabil priloženo kodo. Vem, da se tak način (ob napaki preskoči) odsvetuje, a sem za kaj drugega prekratek. Prosim za nasvet.
[code]
For Each Cell In ActiveSheet.UsedRange 'preveri vsako celico v obsegu za preverjanje veljavnosti
If (Cell.HasFormula Or Cell.Value = "") Then 'če je v celici formula ali je prazna
' tu obravnavate celice, ki so prazne ali imajo formulo
On Error Resume Next 'gre naprej
ElseIf Not Cell.Validation.Value Then 'če je napaka
Cell.Select 'izbere celico
bErr = True 'in postavi napako
Selection.Font.Color = -16776961 'pobarva tekst rdeče
' ne pozabi zakomentirati v "produkciji"
' If MsgBox("Podatek v celici '" & Cell.Address(False, False) & "'" & vbCrLf & _
"ni v skladu z dogovorjenim." & vbCrLf & vbCrLf & _
"Nadaljujem s preverjanjem?", _
vbYesNo) = vbNo Then GoTo Filtriraj
End If
Next
[/code]
In še nevezano na temo v naslovu.
Kaj delam narobe oziroma kaj nimam pravilno označenega pri nastavitvah, da vsem ostalim kodo pokaže v ločenem okencu, meni pa jo pokaže znotraj vprašanj/teksta? Predno vnesem kodo kliknem na gumb "Code" in potem med "[code]" in "[/code]" kopiram kodo iz makra.
Hvala in Lp,
Fatso
Re: Preverjanje pravilnosti že vnesenih podatkov
- Vaša priložena koda je enakovredna spodaj-zapisani:
Koda: Izberi vse
For Each Cell In ActiveSheet.UsedRange 'preveri vsako celico v obsegu za preverjanje veljavnosti If Not (Cell.HasFormula Or Cell.Value = "" Or Cell.Validation.Value) Then Cell.Select 'izbere celico bErr = True 'in postavi napako Selection.Font.Color = -16776961 'pobarva tekst rdeče End If Next
- Element 'CODE' vam verjetno ne deluje, ker imate spodaj ob odgovoru obkljukano 'onemogoči BBCode'.
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Preverjanje pravilnosti že vnesenih podatkov
Matjaž, hvala lepa.
Prijeten vikend.
Fatso
Prijeten vikend.
Fatso