Aranjare foi de lucru

Presupunem că avem mai multe foi de lucru denumite diferit, și încă o foaie de lucru (numită „centralizator”) care conține numele foilor de lucru.

Inițial, ordinea foilor de lucru este aleatorie și dorim să aranjăm foile în ordinea elementelor din listă.

Aranjare foi de lucru

Înainte de a executa macrocomanda, trebuie selectată foaia de lucru „centralizator” și prima celulă din listă (în imaginea de mai sus, celula A12).

Macrocomanda conţine o instrucţiune Do While, care parcurge întreaga listă și se oprește când nu mai găseşte nicio valoare în următoarea celulă.

Preia valoarea primului element în variabila v1, apoi sare un rând mai jos şi verifică dacă valoarea celui de al doilea element este mai mare ca zero (conţine o valoare).

Instrucţiunea If... Then verifică dacă următoarea celulă din listă este goală.

Dacă în celulă nu există nicio valoare, iese din bucla Do While cu Exit Do.

Dacă există o valoare, o preia în variabila v2.

Având memorate cele două variabile, mută foaia de lucru al cărei nume se află în v2 după foaia de lucru al cărei nume este stocat în v1.

COPIEREA RAPIDĂ A CODULUI ÎN VBA

Se copie codul de mai jos (selecție și Ctrl+C).

În fișierul Excel se apasă Alt+F11 (Excel va deschide aplicația VBA), apoi se apasă tasta F7 (pentru a comuta la fereastra Code).

Aici se poate insera codul copiat (cu Ctrl+V).

Sub AranjareFoiDeLucru()

' Macrocomanda aranjează foile de lucru în ordinea

' găsită în foaia de lucru numită "centralizator".

' Celula activă/selectată trebuie să fie prima celulă din listă

' si să nu existe celule goale în listă - la prima celulă goală, macrocomanda se opreşte.


ActiveCell.Select

'aici celula activa trebuie sa fie prima din lista


'Varianta: daca adresa primei celule din lista este mereu aceeasi,

' de exemplu A12 din foaia de lucru "centralizator",

'in locul comenzii de mai sus se pot scrie urmatoarele doua linii:

' Sheets("centralizator").Select

' ActiveSheet.Range("A12").Select


Dim v1, v2 As String 'declarare variabile

Do While Not IsEmpty(ActiveCell)

'Initializare variabile

v1 = Format(ActiveCell.Value, "0") 'preia valoarea in v1

ActiveCell.Offset(1, 0).Select

v2 = Format(ActiveCell.Value, "0") 'preia valoarea in v2


If v2 = "" Then 'daca urmatoarea celula din lista este goala

Exit Do 'iese din bucla Do While

End If

Sheets(v2).Move After:=Sheets(v1) 'muta foaia cu numele din v2 dupa foaia cu numele din v1

Sheets("centralizator").Select

Loop 'reia bucla pana cand ajunge la sfarsitul listei

'sau pana cand intalneste prima celula goala din lista

'variabila v2 este goala

Sheets("centralizator").Select 'revine la foaia de lucru "centralizator"

End Sub