Preverjanje pravilnosti že vnesenih podatkov

Pomoč pri izdelavi makrov
Odgovori
Fatso
Prispevkov: 42
Pridružen: Ne Jan 07, 2007 2:01 pm
Kraj: Ljubljana
Kontakt:

Preverjanje pravilnosti že vnesenih podatkov

Odgovor Napisal/-a Fatso »

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]
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Preverjanje pravilnosti že vnesenih podatkov

Odgovor Napisal/-a admin »

Pozravljeni,

Če grem po vrsti:
  1. 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
    
  2. 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.
  3. 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
Fatso
Prispevkov: 42
Pridružen: Ne Jan 07, 2007 2:01 pm
Kraj: Ljubljana
Kontakt:

Re: Preverjanje pravilnosti že vnesenih podatkov

Odgovor Napisal/-a Fatso »

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
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Preverjanje pravilnosti že vnesenih podatkov

Odgovor Napisal/-a admin »

  1. 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
    
  2. Element 'CODE' vam verjetno ne deluje, ker imate spodaj ob odgovoru obkljukano 'onemogoči BBCode'.
lp,
Matjaž Prtenjak
Administrator
Fatso
Prispevkov: 42
Pridružen: Ne Jan 07, 2007 2:01 pm
Kraj: Ljubljana
Kontakt:

Re: Preverjanje pravilnosti že vnesenih podatkov

Odgovor Napisal/-a Fatso »

Matjaž, hvala lepa.
Prijeten vikend.
Fatso
Odgovori