Archive for the ‘VBA’ Category

Cum sa trimiti automat un mail printr-o apasare de buton?

Buna,

La inceputul lunii am lucrat la un raport care trebuia trimis catre mai multe persoane, si am cautat o sintaxa VBA prin care sa trimit cate un mail la fiecare persoana folosind Thunderbird. Oricat as vrea sa va spun ca am gasit, nu se poate.

Ca sa foloseste totusi optiunea de trimitere mail prin VBA am apelat la Outlook si pentru ca multe persoane m-au intrebat cum se face, astazi va voi prezenta sintaxa pentru trimiterea mailurilor folosind Outlook.

Configurarea fisierului

Pentru exemplul de azi, nu a fost nevoie de o configurare foarte complicata. Am formatat o celula pentru adaugarea adresei de mail catre care se trimite mailul si am adaugat un buton pentru trimiterea mailului. Procedura VBA pentru trimiterea mailului am alocat-o butonului Trimite mail din fisier.

Advanced Filter in VBA [Partea 4/4]

Buna,

Am revenit cu ultima partea din seria Advanced Filter. Astazi vom parcurge sintaxa vba pentru Advanced Filter si vom vedea 3 exemple pentru aceasta optiune:

 

Sintaxa VBA Advanced Filter

In VBA Advanced Filter are urmatoarea sintaxa:

expression .AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)
  • expression  - este camp obligatoriu si reprezinta obiectul de tip Range din VBA. Pentru Advanced Filter, acesta poate fi o coloana, o regiune de celule sau o zona definita prin optiunea Named Range;
  • Action - prezinta actiunea care se doreste prin aplicarea Advanced Filter. Este un camp obligatoriu si poate fi xlFilterCopydatele sunt copiate intr-o zona definita sau xlFilterInPlacefiltrare in acelasi tabel;
  • CriteriaRange – in acest camp se scrie adresa regiunii in care sunt setate criteriile pentru filtrare. Acest camp este optional. Daca este omis, filtrarea se face fara criterii;
  • CopyToRangeacest camp se foloseste in cazul xlFilterCopy si se foloseste pentru a scrie adresa regiunii unde se doreste copierea datelor dupa filtare. Acest camp este optional.
  • Unique - Acest camp se foloseste atunci cand se doreste filtrarea inregistrarilor unice. Argumentele pot fi TRUE, atunci cand se doreste filtrarea unica si FALSE cand nu se doreste acest lucru. In mod implicit, campul este setat pe FALSE.

Filtrarea in acelasi tabel (Filter in place)

La fel ca in articolele anterioare am folosit acelasi tabel. Codul VBA folosit pentru filtrarea tabelului conform unor criterii este:

Public Sub FilterInPlace()

Worksheets(“Advanced filter”).Range(“A1:C29″).AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets(“Advanced filter”).Range(“F1:F2″)

End Sub

Read more »

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 activitatilorcu 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.

VBA – Filtrare Data Validation List

Buna,

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.

Pe coloana A:A am completat lista de clienti a companiei. In celula C2 se va aduce din sheet-ul Formular filtrarea pe care o doreste utilizatorul. Formula care am folosit-o in celula C2 este urmtoarea: =IF(formular!B2=”",”",formular!B2). Iar in coloana D se va filtra cu ajutorul macro-ului lista de clienti de pe coloana A:A.

In sheet-ul Formular am doua campuri: filtrare clienti si client. In campul Filtrare Client se va completa de catre utilizator primele litere din numele clientului sau prima litera sau cum doreste ele filtrarea. In campul Client se va alege din lista derulanta clientul pentru care se completeaza formularul. In plus am adaugat si o poza pentru a accesa macro-ul pentru filtrarea listei de clienti.

In continuare voi prezenta macro-ul folosit pentru filtrarea listei de clienti:

Public Sub FiltrareClienti()

Dim wsSD As Worksheet
Set wsSD = Sheets(“Lista clienti”)

wsSD.Range(“D1″).EntireColumn.ClearContents

With wsSD
.Columns(“A:A”).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
“C1:C2″), CopyToRange:=.Range(“D1″), Unique:=True
End With

End Sub

Folosim wsSD.Range(“D1″).EntireColumn.ClearContents pentru a sterge eventualele date din coloana D:D din sheet-ul Lista clienti. Realizam aceasta stergere a datelor pentru a ne asigura ca noua filtrare a listei nu va contine date din filtrarea anterioara.

Pentru filtrarea propriu zisa se foloseste varianta VBA a Advance filter. Aceasta comanda permite utilizatorilor filtrarea unui tabel in functie de una sau mai multe conditii. Eu folosesc de cele mai multe ori advance filter pentru a genera dintr-o lista, aceeasi lista dar fara campuri duplicate.

      With wsSD
.Columns(“A:A”).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
“C1:C2″), CopyToRange:=.Range(“D1″), Unique:=True
End With

In VBA advance filter are urmatoarea sintaxa:  .AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)

  • Actionreprezinta actiunea pe care dorim sa o realizeze Advanced filter si poate fi una din urmatoarele optiuni: xlFilterCopy si xlFilterInPlace. Cu prima copiem datele rezultate in alta parte a fisierului si cu al doilea se va face filtrare direct in tabel.
  • CriteriaRange - reprezinta criteria pe baza careia se face filtrarea. Aici se va alege din cadrul fisierului celulele care contin regula de filtrare. In cazul nostru aceste celule sunt reprezentate de celule C1:C2 din sheet-ul Lista clienti. CriteriaRange este optionala, iar daca argumentul este omis nu va exista nici o regula de filtrare.
  • CopyToRange - reprezinta argumentul folosit in cazul in care am ales ca lista filtrata sa fie copiata in alta parte din fisier. La fel ca la CriteriaRange aici vom scrie celula sau celulele de unde se incepe copierea tabelului filtrat. In cazul nostru aceasta celula este D1 din sheet-ul Lista clienti.
  • UniqueEste un argument logic si se va alege True daca se doreste filtrarea pe inregistrari unice din tabel si False pentru a filtra toate inregistrarile. Valoarea implicita este Fals.

Am declarat procedura pentru filtrarea listei de clienti publica pentru a o putea atribui pozei pe care am importat-o in fisier.

Pentru a termina de implementat aceasta optiuni in fisier mai trebuie sa cream lista din campul Client cu ajutorul Data Validation List. Pentru acest lucru alegem celula B3 din sheet-ul Formular, mergem in meniu la DATA si alegem Data Validition si apoi list. Aici vom folosi urmatoarea formula: =IF($B$2=”",Lista_clienti,ListaFiltrata).

Daca in camplul in care scriem regula de filtrare nu este scris nimic se va afisia toata lista de clienti (Lista_clienti am declarata cu Named Ranges si am creat-o dinamic), iar daca s-a completat o regula de filtrare se va afisa lista filtrata (creata la fel cu Named Ranges si neaparat trebuie creata dinamic).

Pentru a intelege mai usor cum se realizeaza cu ajutorul VBA filtrarea Data Validation List puteti downloada fisierul cu exemplul de la urmatoarea link: VBA-filtrare clienti.xlsm