Exemplu general: Deschiderea unui fișier folosind List Box

Exemplul următor afișează un formular care folosește o casetă listă din care utilizatorul poate selecta un fișier pe care să îl deschidă. Formularul este simplu, la fel și codul său. Macrocomanda include o buclă și un șir (array) pentru a prelua numele fișierelor dintr-un folder și apoi afișează numele fișierelor în caseta listă. Utilizatorul trebuie să selecteze un fișier și să facă clic pe butonul Open pentru a-l deschide. Figura de mai jos prezintă formularul în acțiune, afișând fișiere Excel.

Acest exemplu poate fi adaptat la oricare din aplicațiile Office 2016 discutate anterior, schimbând numele de fișier la un tip adecvat pentru aplicația respectivă și modificând, de asemenea, câteva dintre declarațiile cheie. Acest exemplu arată acum cum se poate crea procedura în Excel.

Construirea formularului

Pentru construirea formularului se urmează etapele:

  1. Se pornește aplicația în care se va lucra. În acest caz, Excel.
  2. Se deschide Visual Basic Editor apăsând tastele Alt+F11 sau cu clic pe pictograma Visual Basic din Developer de pe panglică.
  3. În Project Explorer, clic dreapta pe proiectul la care se va adăuga formularul și se alege Insert > UserForm din meniul contextual pentru a insera un formular în proiect.
  4. Se trage de mânerul din colțul dreapta jos a formularului pentru a-l mări puțin.
  5. Se setează proprietatea Name a formularului la frmOpen_a_Current_File și Caption la Deschidere fisier. Se bifează proprietatea Width. Se alege lățimea (Width) de 250 pixeli.
  6. Clic pe butonul Label din Toolbox, apoi clic pe colțul din stânga sus a formularului pentru a plasa acolo o etichetă. În fereastra Properties, setările pentru etichetă sunt prezentate mai jos.

7. Clic pe butonul ListBox din Toolbox, apoi clic sub etichetă în formular pentru a plasa acolo caseta listă. Se setează următoarele proprietăți:

8. Dublu-clic pe butonul CommandButton din Toolbox, apoi clic de două ori în partea de jos a formularului pentru a plasa cele două butoane de comandă. Se setează proprietățile ca mai jos:

9. Se aranjează astfel butoanele de comandă:

a. Clic pe butonul cmdCancel pentru a-l selecta, apoi se trage alături de butonul cmdOK.

b. Cu butonul cmdCancel selectat, Ctrl+click pe butonul cmdOK pentru a-l adăuga la selecție.

c. Se alege Format > Group pentru a grupa butoanele.

d. Se alege Format > Center In Form > Horizontally pentru a centra butoanele pe orizontală în formular.

e. Se poate trage grupul pentru repoziționare.

Crearea codului pentru formular

Codul pentru formular se creează urmând etapele de mai jos:

1. Având selectat formularul, se apasă tasta F7 pentru a afișa foaia cu codul pentru formular.

2. În zona declarațiilor pentru cod (în partea de sus a ferestrei Code), se introduce comanda Option Base 1 pentru ca numerotarea șirurilor să înceapă de la 1 în loc de 0:

Option Base 1

3. Având selectat UserForm în lista Object (din stânga sus a foii pentru cod), din lista Procedure (dreapta sus) se alege Initialize. Visual Basic Editor introduce o parte din procedura Initialize în cod, astfel:

Private Sub UserForm_Initialize()
End Sub

4. Se introduc comenzile pentru procedura Initialize, scrise în codul de mai jos.

5. În lista derulantă Obiect, selectați cmdCancel. Editorul Visual Basic introduce cod pentru procedura Click, așa cum se arată aici. (Clic este evenimentul implicit pentru controlul CommandButton, astfel încât Editorul Visual Basic presupune că doriți să creați o procedură Click.)

Private Sub cmdCancel_Click()
End Sub

6. Se introduc comenzile pentru procedura cmdCancel_Click din codul de mai jos.

7. În lista Object, se selectează cmdOpen. Visual Basic Editor introduce cod pentru procedura Click.

8. Se introduc comenzile pentru procedura cmdOpen scrise mai jos.

9. Se personalizează linia 9 (din codul de mai jos pentru procedura Initialize) și linia 32 (din procedura cmdOpen_Click) astfel încât codul să lucreze cu aplicația folosită, ca mai jos. Procedura afișată este setată să fie executată în Excel, dar se poate modifica calea pentru a indica care sunt fișierele țintă din computer.

  • Pentru Word, comanda Workbooks.Open se schimbă cu comanda Documents.Open:
If lstFiles.Value <> "" Then Documents.Open _
   Filename:="c:\transfer\" & lstFiles.Value
  • Pentru PowerPoint, comanda Workbooks.Open se schimbă cu comanda Presentations.Open:
If lstFiles.Value <> "" Then Presentations.Open _
Filename:="c:\transfer\" & lstFiles.Value

Mai jos se află întreaga versiune a codului din formularul Deschidere Fisier.

Folosirea unui control ListBox pentru a deschide un fișier

1. Option Base 1
2.  
3. Private Sub UserForm_Initialize()
4.  
5. Dim strFileArray() As String
6. Dim strFFile As String
7. Dim intCount As Integer
8.  
9. strFFile = Dir("c:\transfer\spreads\*.xlsb")
10. intCount = 1
11.  
12. Do While strFFile <> ""
13.   If strFFile <> "." And strFFile <> ".." Then
14.     ReDim Preserve strFileArray(intCount)
15.     strFileArray(intCount) = strFFile
16.     intCount = intCount + 1
17.     strFFile = Dir()
18.   End If
19. Loop
20.  
21. lstFiles.List() = strFileArray
22.  
23. End Sub
24.          
25. Private Sub cmdCancel_Click()
26.   Me.Hide
27.   Unload Me
28. End Sub
29.          
30. Private Sub cmdOpen_Click()
31.   Me.Hide
32.   If lstFiles.Value <> "" Then Workbooks.Open _
    Name:="c:\transfer\spreads" & lstFiles.Value
33.   Unload Me
34. End Sub 

Mai sus este codul pentru formularul frmDeschidere_Fisier: o secțiune cu declarații și trei proceduri pentru evenimente.

În secțiunea declarații, linia 1 conține comanda Option Base 1, care face ca orice șir folosit în cod să înceapă de la 1 în loc de 0. Linia 2 este goală.

Iată ce se petrece în procedura UserForm_Initialize procedure (liniile de la 3 până la 23):

  • Linia 3 începe procedura Initialize pentru formular. Linia 4 este goală.
  • Linia 5 declară variabila șir strFileArray de tip String. Linia 6 declară variabila strFFile de tip String. Linia 7 declară variabila intCount de tip Integer. Linia 8 este goală.
  • Linia 9 atribuie variabilei strFFile rezultatul unei operații pe directoare în folderul ales (aici, c:\transfer\spreads\), dar calea se înlocuiește cu propria cale către un folder de pe propriul computer care conține fișierele cu extensia .xlsb. La fel și pe linia 32, se introduce propria cale.
  • Linia 10 setează contorul intCount counter la 1. De reținut că în cazul în care nu se folosește declarația Option Base 1 pentru această procedură, contorul Count va fi setat la 0 (sau la valoarea corespunzătoare pentru altă declarație Option Base folosită). Prima apelare la Dir, care specifică calea ca argument, întoarce primul fișier găsit în folder (presupunând că găsește cel puțin un fișier). Fiecare apel ulterior fără argument returnează următorul fișier din folder, până când Dir nu va mai găsi fișiere.
  • Linia 11 este goală. Liniile de la 12 până la 19 conțin o buclă Do While...Loop care rulează până când strFFile nu este un șir gol ("").
  • Linia 13 verifică dacă strFFile nu este folder, comparându-l cu un singur punct și cu două puncte, folosite la indicarea folderelor. Dacă strFFile nu este folder, linia 14 folosește o comandă ReDim Preserve pentru a crește dimensiunile șirului strFileArray la numărul din intCount în timp ce reține informația curentă din șir, construind astfel lista de fișiere din folder.
  • Linia 15 atribuie indexului intCount al șirului strFileArray conținutul curent al strFFile.
  • Linia 16 adaugă 1 la intCount, iar linia 17 setează strFFile la rezultatul funcției Dir (primul fișier care se potrivește cu șablonul *.xlsb din folderul ales).
  • Linia 18 încheie condiția If. Linia 19 conține cuvântul cheie Loop care va continua bucla atâta timp cât instrucțiunea Do While este True.
  • Când bucla se încheie, linia 21 setează proprietatea List din caseta list a lstFiles list din casetea de dialog la conținutul strFileArray, care acum conține o listă cu toate fișierele din folder.
  • Linia 22 este goală, linia 23 încheie procedura, iar linia 24 este goală.

Iată ce se petrece în procedura cmdCancel_Click (liniile de la 25 până la 28):

  • Linia 25 începe procedura cmdCancel_Click, iar linia 28 o încheie.
  • Linia 26 ascunde formularul, folosind cuvântul cheie Me ca referință.
  • Linia 27 descarcă formularul din memorie.

Iată ce se petrece în procedura cmdOpen_Click (liniile de la 30 până la 34):

  • Linia 30 începe procedura cmdOpen_Click, iar linia 34 o încheie.
  • Linia 31 ascunde formularul, folosind tot cuvântul cheie Me.
  • Linia 32 verifică dacă proprietatea Value a listei lstFiles nu este un șir gol ("") și, dacă nu este, folosește metoda Open a colecției Documents pentru a deschide fișierul ales din list box. Comanda adaugă la cale (c:\transfer\ spreads\) proprietatea Value a casetei list box pentru a produce numele fișierului. Se înlocuiește cu propria cale în loc de c:\transfer\spreads\.
  • Linia 33 descarcă formularul din memorie.

De reținut că pentru a testa acest exemplu, trebuie modificate liniile 9 și 32 pentru a include o cale de fișier pe propriul PC în care sunt stocate fișierele XLSB. Pentru Excel 2016, încercați această locație: C:\Users\Nume_utilizator\AppData\Roaming\Microsoft\Excel\XLSTART.