Đoạn code Mở tất cả các file excel trong một thư mục và lấy dữ liệu.

AnhExcel

Member
Hội viên mới
Hỏi: Có phương thức nào trong VBA có thể lần lượt mở, copy 1 cell rồi đóng lại cho tất cả các file Excel có trong 1 thư mục được chỉ định không? Số file cần mở khoảng 2000 file, có tên dạng MA0001 - MA2000. Vị trí cell cần copy trong từng file là cố định (ví dụ là D7). Tôi đã dùng thử lệnh For nhưng thường thì chỉ có thể mở 500 file là bị báo thiếu bộ nhớ (RAM128MB). Có cách nào mở ra, đóng lại từng file để giải phóng bộ nhớ không?

Đáp: Bạn có thể viết 1 macro để thực hiện yêu cầu riêng, đoạn code sau đây sẽ lặp 2000 lần, mỗi lần mở 1 file, copy cell D7 của nó, đóng file đó lại rồi paste kết quả vào cell qui định ở worksheet hiện hành:

Sub CopyCell()
' CopyCell Macro
' khai báo các biến cần dùng
Dim Path As String
Dim Dir As String
Dim i As Integer
Dim rg As String
' thiết lập thư mục
Dir = "c:-/data\"
' lặp 2000 lần
For i = 1 To 2000
' tạo pathname truy xuất file thứ i
Path = Dir & "ma" & Format(i, "0000") & ".xls"
' mở file
Workbooks.Open Filename::path
' chọn cell d7
Range("d7").Select
' copy nó vào clipboard
Selection.Copy
' đóng file
ActiveWorkbook.Close
' thiết lập cell cần dán kết quả
rg = "A" & i
Range(rg).Select
' dán kết quả
ActiveSheet.Paste
Next i
End Sub


Lưu ý rằng trong mỗi vòng lặp ta đều thực hiện đóng file sau khi đã truy xuất. Nếu đoạn chương trình trên bị dừng giữa chừng và báo lỗi thiếu bộ nhớ thì có thể kết luận rằng hoạt động đóng file của Excel có lỗi chứ không phải là đoạn code.

(St)
 

phatnq2002

Tích cực giảm cân...
Hội viên mới
Góp ý thêm cho phần mở file để copy

Bạn AnhExcel viết đoạn code khá tốt để giải quyết yêu cầu.
Tuy nhiên tôi xin góp ý một chút, khi mở như vậy, mặc định Sheet1 sẽ là worksheet default, do vậy nếu trong trường hợp lấy dữ liệu ở sheet khác thì chưa ổn. Vậy tôi đề nghị thêm một câu lệnh sau:

Worksheets("Tên sheet cần lấy dữ liệu").Select
trước đoạn lệnh:
' chọn cell d7
Range("d7").Select


Làm cái này để chắc ăn thôi.:)
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top