Các tệp trong một thư mục trong Excel VBA
Dưới đây, chúng ta sẽ xem xét một chương trình trong Excel VBA lặp qua tất cả các bảng tính và sổ làm việc đã đóng trong một thư mục và hiển thị tất cả các tên.
Tải xuống Book1.xlsx, Book2.xlsx, Book3.xlsx, Book4.xlsx và Book5.xlsx và thêm chúng vào “C: \ test \”
Tình huống:
Thêm các dòng mã sau vào nút lệnh:
-
Đầu tiên, chúng ta khai báo hai biến kiểu String, một đối tượng Worksheet và hai biến kiểu Integer.
Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
-
Để tránh nhấp nháy màn hình, hãy tắt cập nhật màn hình.
Application.ScreenUpdating = False
-
Khởi tạo thư mục biến. Chúng tôi sử dụng hàm Dir để tìm .xl đầu tiên ?? tệp được lưu trữ trong thư mục này.
directory = "c:\test\" fileName = Dir(directory & ".xl??")
Lưu ý: hàm Dir hỗ trợ việc sử dụng nhiều ký tự đại diện (*) và ký tự đơn (?) Để tìm kiếm tất cả các loại tệp Excel khác nhau.
-
Biến fileName bây giờ giữ tên của tệp Excel đầu tiên được tìm thấy trong thư mục. Thêm vòng lặp Do While.
Do While fileName <> "" Loop
Thêm các dòng mã sau (tại 5, 6, 7, 8 và 9) vào vòng lặp.
-
Khởi tạo các biến kiểu Integer và thêm tên tệp Excel vào cột đầu tiên của hàng i.
i = i + 1 j = 2 Cells(i, 1) = fileName
-
Không có cách nào đơn giản để trích xuất dữ liệu (hoặc tên trang tính) từ các tệp Excel đã đóng. Do đó, chúng tôi mở tệp Excel.
Workbooks.Open (directory & fileName)
-
Thêm tất cả các tên trang tính của tệp Excel vào các cột khác của hàng i.
For Each sheet In Workbooks(fileName).Worksheets Workbooks("files-in-a-directory.xlsm").Worksheets(1).Cells(i, j).Value = sheet.Name j = j + 1 Next sheet
-
Đóng tệp Excel.
Workbooks(fileName).Close
-
Hàm Dir là một hàm đặc biệt. Để lấy các tệp Excel khác, bạn có thể sử dụng lại hàm Dir mà không có đối số.
fileName = Dir()
Lưu ý: khi không còn tên tệp nào trùng khớp, hàm Dir trả về một chuỗi có độ dài bằng không (“”). Kết quả là Excel VBA sẽ rời khỏi vòng lặp Do While.
-
Bật cập nhật màn hình một lần nữa (bên ngoài vòng lặp).
Application.ScreenUpdating = True
-
Chạy thử chương trình.
Kết quả: