luni, 31 octombrie 2011

VBA Basic


Mi-a fost atrasa atentia ca nu am specificat in postul anterior si unde anume scriem codul VB. Vreau sa ma revansez si am ales ca in aceasta postare sa dau cateva detalii despre acest lucru.

Ce este un Macro?

Macrocomenzile reprezinta o serie de comenzi şi funcţii care pot fi apelate ori de câte ori este nevoie. Cu ajutorul lor putem sa realizam urmatoarele lucruri:
  • automatizarea activitatilor - cu ajutorul macrocomenzilor se pot automatiza sarcinile care se realizeaza in mod repetat. Acest lucru va poate ajuta sa salvati timp. Un exemplu in acest sens ar fi formatarea repetata a unui sheet intr-un anumit mod. 
  • Crearea propriilor funcţii şi comenzi rapide ca de exemplu: crearea unei combinatii de taste sau doar a unei taste pentru a schimba culoarea unei celule fara a mai fi nevoie sa folosesti mouse-ul.
  • Crearea unui  fisier excel interactiv: Majoritatea persoanlor considera ca excelul este greu de folosit, cu ajutorul user form-urilor, a butoanelor si a altor functionalitati Macro se pot creea fisiere mult mai prietenoase
  • Crearea propriilor aplicatii: La un nivel superior, exista posibilitatea de a va crea propriile aplicaţii în Excel pentru diverse scopuri.

VB Editor si cum ajungem la el

VB Editor reprezinta mediul care se utilizeaza pentru a creea, modifica si a gestiona macro-urile pentru programele Office. In continuare voi prezenta mai multe modalitati pentru a deschide Editor VB. 

O prima modalitate de a ajunge in VB Editor este din meniul pentru Macrocomenzi, care se afla in bara de meniu a excelului. Fata de Office 2003 si variantele anterioare, in Office 2007 si 2010 s-a creat meniu separat pentru Macro-uri. De accea va voi arata si cum deschidem VB Editor in ambele variante.
    In Office 2007 si 2010 butonul care deschide editorul VB se gaseste in bara de meniu la categoria  DEVELOPER.













    marți, 18 octombrie 2011

    VBA - Filtrare Data Validation List

    In aceasta vara am lucrat la un proiect in excel care mi-a testat capacitatile si datorita caruia am pornit pe calea programarii VBA. Dupa mai multe postari care au avut ca subiect diverse formule, cred ca acum este momentul potrivit pentru a va impartasi si cateva exemple cu VBA.

    Am hotarat ca prima postare pe acest subiect sa fie una usoara si anume filtrarea listei create cu Data Validation. Trebuie sa va marturisesc ca eu folosesc Data Validation List in foarte multe fisiere, in general este foarta utila in cadrul formularelor care sunt folosite de catre alte persoane. Modalitatea de folosire a listei create cu Data Validation este de multe ori ingreunata de marimea mare a listei care dorim sa o afisam.

    Pentru a rezolva aceasta problema putem sa reorganizam informatiile pe mai multe categorii si/sau subcategorii care sa ne ajuta sa realizam o filtrare initiala (Dependent Data Validation List). Dar nu in toate cazurile informatiile pot fi reorganizate in acest fel si pentru aceasta lucru eu am descoperit filtrarea listei cu ajutorul unui macro.

    Pentru exemplul de azi am ales sa folosim o lista de clienti pe baza careia doresc sa fac o lista cu Data Validation care sa fie folosita intr-un formular (de exemplu intr-o solicitare de facturare). Pentru acest fisier avem nevoie de doua sheet-uri: Lista clienti si Formular.

    Sheet-ul  Lista clienti  este un sheet ajutator in care avem lista de clienti pentru formular. Tot in acest sheet se va filtra lista de clienti pe baza a ceea ce este completat in formular.

    vineri, 7 octombrie 2011

    Utilizarea functiilor LOOKUP pentru interogarea tabelelor de date - INDEX

    Am ramas datoare cu o ultima postare pentru interogarea tabelelor de date. Asa cum v-am promis voi prezenta functia INDEX care este favorita mea pe parte de functii Lookup. Este preferata mea pentru ca pot cauta cum vreau eu si in plus pot cauta avand mai multe conditii :D.
    • Functia INDEX - se foloseste pentru a returna o valoare dintr-un tabel in functie de coloana si randul la care se gaseste acea valoare. Sintaxa acestei functii este urmatoarea: INDEX(array,row_num,column_num)
      1.  Array - reprezinta tabelul din care dorim ca functia sa ne returneze rezultatul. Un mic sfat ar fi sa faceti referinta regiunea de celule daca doriti sa copiati formula si in alte celule.
      2. Row_num - reprezinta numarul randului din care dorim sa fie adusa valoarea. Daca row_num este omis atunci column_num este obligatoriu. Tot in acest caz, functia index nu va returna doar o valoare ci va returna toate valorile din coloana respectiva.
      3. Column_num - reprezinta numarul coloanei din care se va aduce valoarea dorita. La fel ca la mai sus, daca column_num este omis, row_num este obligatoriu.
    Cea mai usoara utilizarea a functiei INDEX este atunci cand cunoastem numarul randului si coloanei, dar de cele mai multe ori interogarile se fac in tabele care sunt destul de mari. In acest caz, numarul randului sau al coloanei nu se cunoaste. La fel ca in postarea anterioara, pentru a afla aceste necunoscute folosim functia MATCH.

    Pentru a intelege mai bine cum putem folosi INDEX, am creat un tabel in care avem urmatoarele coloane: Cod produs, Denumire produs si stocul existent in Depozit si Magazin: