Microsoft Office Excel
uređuje Dragan Grbić

 Office Praktikum | Mapa sajta 

 
Bookmark and Share
Matična strana sajta
Novo na sajtu
Mapa sajta
Beleške
Knjiga posetilaca
Kontakt

Prethodna stranica
Pretraga sajta
Pretraga MSKB

Blog Praktikuma
RSS feed 
 
Office Praktikum

Još o Excelu
 


Skoro svakodnevno slušamo
  Radio Paradise:
  eklektični muzički online radio bez reklama!
 

   

Sponzori sajta

  Connectivity by SBB
 
Connectivity by SBB

 

Informacije

NOVOSTI
Novi prilog o Wordu
Tri nova autorska članka
Četiri priloga o Accessu
Opis i uputstvo za alatku YuCirLat '08 (Word)

SADRŽAJ ZA PREUZIMANJE
YuCirLat '08 unapređena alatka za konverziju kodnih rasporeda u Wordu

SKREĆEMO PAŽNJU
Beleške: B(l)oga li ti tvoga!- prilog koji će nekog možda čak i da naljuti
Kako pretraživati MSKB
* a pronaći ćete i još mnogo novih sadržaja...

USKORO SERIJA ČLANAKA O OFFICEU 2010

POZIVAMO VAS
* i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.



  (C) 2000-2009 Praktikum na Webu
 

Restrikcija unosa teksta

Nivo:  NIVO 3 - klinite za objašnjenje


Excel je, naravno, prevashodno krckalica brojeva, pa su alatke za kontrolisani unos numeričkih vrednosti dobro razvijene. Međutim, šta raditi kada treba ograničiti unos tekstualnog sadržaja? Alatka za validaciju unosa tada nije baš od pomoći...

Pre nekog vremena, na SezamProu je postavljeno pitanje o mogućnostima restrikcije unosa na radni list u Excelu. Opšte pitanje uvek završava i opštim odgovorom: postoji bar nekoliko mehanizama kontrole unosa sadržaja, što zavisi od organizacije podataka, mogućnosti standardnih alata i vaših posebnih potreba. Sistem Data Validation je u velikoj većini slučajeva sasvim dovoljan mehanizam zaštite pri unosu numeričkih sadržaja; tu se mogu definisati i razne opcije ponašanja pri uočenoj grešci kriterijuma.

Međutim, ta alatka iskazuje slabost kada je reč o unosu tekstualnih sadržaja: jedina predviđena kontrola unosa je dužina teksta. Moguće je i postavljanje formule u opciji Custom, ali ponekad nije lako napraviti formulu koja će ograditi skup dozvoljenih ili nepoželjnih unosa. U konkretnom slučaju jednog kolege, pribegli smo sasvim uobičajenom rešenju, kojeg se neki početnici pomalo plaše, ali bez razloga - izvedena je procedura događaja na radnom listu koja proverava upravo uneti tekst, a potom reaguje na nepoželjni unos.

Kasnije sam malo razvio taj postupak na proizvoljni opseg "prostora zabrane" i na niz "zabranjenih" stringova. Sledeći makro unesite u VBE u modul radnog lista (dupli klik na željeni radni list u oknu Project).

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

' elementi zabrane
' prostor u kome funkcioniše zabrana
Set prostor = Range("A1:A5, C1:C5")
' stringovi koji čine zabranu
zabrana = Array("PON", "UTO", "SRE", "ČET", "PET")

Set presek = Application.Intersect(prostor, Target)
unos = UCase(Target.Value)

' ispitivanje zabrane
For Each teskt In zabrana
  If Not (presek Is Nothing) And unos = teskt Then
    MsgBox "NE MOŽE " & unos
    Target.Select
    Target.Value = ""
    Exit For
  End If
Next

End Sub

Izvedeni scenario je sledeći: klauzula Set Prostor okuplja opsege ćelija u kojima važi zabrana (obojite te ćelije drugom bojom, da vam bude lakše). Niz konstanti zabrana sadrži proizvoljni broj stringova čiji unos želite da sprečite. U primeru sam zamislio da unosite prva tri slova imena dana, a ako je to jedan od pet radnih dana, to će se smatrati pogrešnim. Taj sadržaj je napisan velikim slovima kako bi se u pitalici eliminisale razlike u načinu unosa na radni list (funkcija UCase rešava pitanje drugog člana klauzule If).

Vama preostaje samo da definišete elemente zabrane po svom nahođenju, a procedura događaja će odsad brinuti gde da šta unesete. Naravno, ovo jezgro se može razviti tako da se istovremeno ili posebno ispitaju i dozvole pri unosu teksta, pa dobijamo tek neznatno drugačiji kod, recimo poput ovog:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

' elementi dozvole
' prostor u kome funkcioniše dozvola
Set prostor = Range("A1:A5,C1:C5,F1:F5")
' stringovi koji čine dozvolu
dozvola = Array("PON", "UTO", "SRE", "ČET", "PET")

Set presek = Application.Intersect(dozvola, Target)
unos = UCase(Target.Value)

' ispitivanje dozvole
For Each teskt In dozvola
  If presek Is Nothing And unos = teskt Then
    MsgBox "NE MOŽE " & unos
    Target.Select
    Target.Value = ""
    Exit For
  End If
Next

End Sub

 

  (C) 2000-2009 Praktikum na Webu

PC 86


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

Copyright © Praktikum na Webu, 2000-2009; Valinor Design; sva prava pridržana.