Microsoft Office Excel
uređuje Dragan Grbić

Bookmark and Share
Matična strana sajta
  Novo na sajtu
  Mapa sajta
  Beleške
  Kontakt
  Pretraga MSKB

 Blog Praktikuma
  RSS feed
  P@W @Tw

  Izvezi stranicu u PDF
 
Office Praktikum

Još o Excelu
 


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

 
       

Sponzori sajta

SBB CS 1.6 game server: 82.117.200.1
 
Connectivity by SBB

 


 

Informacije

NOVOSTI

I još dva nova priloga o Excelu
Novi prilozi o Wordu
Novi i prilozi u temi "razno o Officeu"
Novi članci o novostima u Officeu 2010!

SADRŽAJI ZA PREUZIMANJE

Lokalizacija Total Commandera 7.51Obe jezičke školjke za popularni program na srpskom sad funkcionišu u bilo kojoj varijanti Windowsa!
RNDalica.ExcelDodatak za Excel 2007/2010 za generisanje slučajnih podataka!
YuConv.ExcelDodatak za Excel 2007/2010 za konverziju pisama!
YuConvNetDodatak za Word 2007/2010 za konverziju pisama i kodnih rasporeda!

SKREĆEMO PAŽNJU

Kako pretraživati MSKB
a pronaći ćete i još mnogo novih sadržaja...

KONTAKT

Da li znate za pravila koja važe pri kontaktu sa nama? Molimo vas da se obavestite o tome!
 
POZIVAMO VAS

i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.

  (C) 2000-2010 Praktikum na Webu
 

Potpuna kontrola kretanja

Nivo:  NIVO 3 - klinite za objašnjenje


Prilikom izrade aplikacije u Excelu, poželjno je da mislite i na najsitnije detalje, kako biste ostvarili potpunu kontrolu ponašanja strukture.

Ukoliko automatizujete procedure u Excelu, verovatno ste bili u prilici da naložite VBA makrou da prelazi na neke druge ćelije da bi upisao vrednosti. U takvim slučajevima, najčešće se isključuje osvežavanje ekrana (metoda Application.ScreenUpdating = False) da ne bi dolazilo do neprijatnog bljeskanja, a pri kraju makroa se aktivira neka unapred poznata ćelija i korisnik nastavlja sa radom. Međutim, to rezervisano mesto ne mora nužno da bude i najbolji izbor nakon izvršenja makroa, jer je možda udaljeno od pozicije u trenutku poziva makroa. Zato ne bi bilo loše uvesti blok naredbi kojima se početno mesto pamti, a na kraju i restaurira.

U listingu je dat par prostih procedura koje obavljaju ovaj posao. Sve što treba da učinite u redovnoj primeni je da na početku neke složene radne procedure napišete Call Zapamti, a na kraju Call VratiSe. Obratite pažnju da se pozicija čuva u globalnim promenljivama na nivou modula, pa obe procedure morate napisati u istom listu modula.

Dim red As Integer, kolona As Integer, list As String

Sub Zapamti()

red = ActiveCell.Row
kolona = ActiveCell.Column
list = ActiveSheet.Name

End Sub


Sub VratiSe()

Worksheets(list).Activate
Application.Goto ActiveSheet.Cells(red, kolona)

End Sub


' primer radne procedure

Sub NekaProcedura()

Call Zapamti

'
' telo procedure
'
'

Call VratiSe

End Sub

Primer sličan prethodnom se ogleda u ograničavanju kretanja kursora po aktivnim ćelijama radnog lista, tako da se posredno ograniči prostor za unos bez zaključavanja ćelija. Pre nekog vremena, kolega Branko Jakovljević je tražio način da promeni ponašanje Excela pri unosu podataka u tabelu, tako da se nakon unosa poslednjeg podatka u koloni automatski dođe na prvo polje sledeće kolone.

Ovako nešto se izvodi lakše nego što se u prvi mah čini. Tehnika koju ću vam ovde opisati je široko primenljiva i samo vam ostaje da napravite varijaciju po sopstvenoj potrebi. Namerno nisam napravio univerzalno rešenje, već prosti studijski primer, u nadi da će to početnici u VBA lakše razumeti.

Recimo da se tabela za unos nalazi na poziciji A3:F10. Kada se pritisne Enter, po defaultu, aktivira se ćelija ispod unete. Krećemo od ćelije A3; kada se popuni A10, treba da se aktivira B3 i tako redom.

Otvaramo VBE (Alt+F11) i potom u prozoru Project duplim klikom na Sheet1 (tj. na list na kome je ova tabela) otvaramo prozor modula radnog lista. U padajućim listama prozora modula biramo Worksheet (leva lista) i metodu Change (desna lista).

Formiraće se zaglavlje makroa Worksheet_Change. Treba uneti sledeće:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If ActiveCell.Row = 11 And ActiveCell.Column < 6 Then
    ActiveCell.Offset(-8, 1).Select
End If

End Sub

Uslov IF traži da se događaj inicira ako je nakon unosa aktivna ćelija u 11. redu i da je kolona manja od F (nakon poslednjeg unosa, recimo, kontola više nije bitna). I - to je sve! Napravimo i varijaciju: recimo da se podaci unose vodoravno, pritiskom na Tab ili drugačije podešenim tasterom Enter (Tools/Options/Edit, stavka Move selection after Enter lista Direction). Makro će izgledati ovako:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If ActiveCell.Column = 7 And ActiveCell.Row < 10 Then
    ActiveCell.Offset(1, -6).Select
End If

End Sub

Postoji mnoštvo sličnih tehnika i, po pravilu, sve su jednostavne. Ključ je samo u pronalaženju odgovarajućeg objekta i njegovih metoda; najbolji način, stalno ponavljam, jeste da se igrate. Obratite pažnju da se makroi koji programiraju događaje na radnom listu uvek unose na listu modula koji pripada tom radnom listu, a ne u novom, nezavisnom listu modula.

 

  (C) 2000-2010 Praktikum na Webu

PC 40, PC 41


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

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