Citirea datelor dintr-un fișier Excel închis

Să presupunem că avem un fișier Excel (sursă), în care se actualizează periodic vânzările pentru fiecare zonă.

În plus, mai avem un fișier care va prelua automat datele din fișierul sursă, fără a-l deschide.

Valorile nu se copie manual din fișierul sursă în fișierul destinație. Această metodă mă scutește să introduc în mod repetat cifrele în mai multe fișiere, reducând posibilele erori, duplicarea etc. De asemenea, va economisi timp prețios.

Codul VBA poate fi scris în evenimentul Workbook_Open() din obiectul ThisWorkBook în VBA. Scriind codul în evenimentul Workbook_Open() vă asigură că la deschiderea fișierului Excel se vor actualiza imediat toate datele.

Deschideți fișierul destinație Excel și apăsați Alt+F11. În fereastra Project Explorer din stânga (se poate accesa / afișa cu View – Project Explorer sau Ctrl+R), sub Microsoft Excel Objects, se află modulul ThisWorkbook. Deschideți acest modul cu dublu click. Cursorul sare în fereastra Code, aflată la dreapta. În partea de sus a ferestrei, click pe lista din stânga, în loc de opțiunea General, alegeți “Workbook”.

Codul VBA

Option Explicit

Private Sub Workbook_Open()

Call ReadDataFromCloseFile

End Sub

Sub ReadDataFromCloseFile()

On Error GoTo ErrHandler

Application.ScreenUpdating = False

Dim src As Workbook

' Deschide fisierul sursa Excel în mod "READ ONLY".

Set src = Workbooks.Open("C:\Q-SALES.xlsx", True, True)

' Preia toate rândurile din fișierul sursă.

Dim iTotalRows As Integer

iTotalRows = src.Worksheets("sheet1").Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).Rows.Count

' Copie datele din fisierul sursa in fisierul destinatie.

Dim iCnt As Integer ' COUNTER.

For iCnt = 1 To iTotalRows

Worksheets("Sheet1").Range("B" & iCnt).Formula =

src.Worksheets("Sheet1").Range("B" & iCnt).Formula

Next iCnt

' INCHIDE FISIERUL SURSA.

src.Close False ' FALSE – nu se salveaza fisierul sursa.

Set src = Nothing

ErrHandler:

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub

Proprietatea Application.ScreenUpdating

Prima linie din macrocomandă este proprietatea Application.ScreenUpdating, care a fost setată la FALSE. Acest lucru va crește viteza de lucru a codului din macrocomandă (informațiile de pe ecran nu se actualizează, iar microprocesorul și memoria RAM sunt folosite doar pentru calcule). Citiți aici MSDN blog pentru a afla mai multe detalii despre această proprietate.

Deschiderea și citirea datelor din fișierul sursă

Apoi, se deschide fișierul sursă Excel Workbook pentru a citi datele din el. Excel nu deschide fizic fișierul și este în stare readonly.

Set src = Workbooks.Open("C:\Q-SALES.xlsx", True, True)

După obținerea datelor, se numără numărul de rânduri din fișierul sursă. Astfel, se parcurg toate datele din fișierul sursă și se scriu în fișierul destinație Workbook (în acest caz, fișierul deschis).

' Copie datele din fisierul sursa in fisierul destinatie.

For iCnt = 1 To iTotalRows

Worksheets("Sheet1").Range("B" & iCnt).Formula =

src.Worksheets("Sheet1").Range("B" & iCnt).Formula

Next iCnt

La final, se închide fișierul sursă și se setează proprietatea Application.ScreenUpdating la true, pentru a afișa datele copiate.