Đếm bảng tính trong nhiều tệp
Xem xét một tình huống mà bạn đang gặp phải với số lượng tệp excel hàng ngày và bạn muốn có một cơ chế nhanh chóng để giúp bạn tìm số lượng trang tính có trong mỗi sổ làm việc. Nếu bạn gặp vấn đề tương tự thì không được bỏ lỡ bài viết này vì nó sẽ giúp ích cho bạn rất nhiều .
Trong bài viết này, chúng ta sẽ học cách đếm trang tính trong nhiều tệp bằng mã VBA.
Câu hỏi: * Tôi cần macro có thể đọc qua danh sách tên tệp và trả về số lượng trang tính có trong mỗi tệp (đây là cơ chế kiểm tra để đảm bảo rằng số lượng trang tính chính xác có trong một loạt tệp được tạo thông qua một quy trình khác). Macro sẽ cần thiết lập đường dẫn của thư mục chứa các tệp (tất cả trong cùng một thư mục), sau đó xác định vị trí tệp đầu tiên, xác định số lượng trang tính và lặp lại cho tệp tiếp theo, v.v.
Tôi nghĩ rằng tôi có thể làm điều này với một công thức chỉ bằng cách tham chiếu tên tệp nhưng tôi tin rằng Excel không có công thức chuyển tiếp thẳng cho số lượng trang tính. Cảm ơn!
Nếu bạn muốn đọc câu hỏi gốc thì hãy nhấp vào tại đây
Sau đây là ảnh chụp nhanh các tệp được lưu trong thư mục có đuôi .xlsx
Lưu ý: Không có tệp nào được bảo vệ bằng mật khẩu.
Để lấy mã, chúng ta cần làm theo các bước sau để khởi chạy trình soạn thảo VB:
Nhấp vào tab Nhà phát triển Từ nhóm Mã, chọn Visual Basic
-
Sao chép đoạn mã dưới đây trong mô-đun chuẩn
Sub ListSheetCounts() Dim Cell As Range Dim Conn As Object Dim Cat As Object Dim ConnStr As String Dim n As Long Dim Rng As Range Dim RngEnd As Range Dim WkbPath As Variant Dim Wks As Worksheet ' Folder path where the workbooks are located. WkbPath = "C:\Users\Test" ' Name of worksheet with the workbook list. Set Wks = Worksheets("Sheet1") ' Starting cell of workbook list. Set Rng = Wks.Range("A2") ' Get the range of cells in the workbook name list. Set RngEnd = Wks.Cells(Rows.Count, Rng.Column).End(xlUp) If RngEnd.Row >= Rng.Row Then Set Rng = Wks.Range(Rng, RngEnd) ' Create the needed ADO objects fro this macro. Set Conn = CreateObject("ADODB.Connection") Set Cat = CreateObject("ADOX.Catalog") ' Add a final backslash the path if needed. WkbPath = IIf(Right(WkbPath, 1) <> "\", WkbPath & "\", WkbPath) ' Step through each cell in the workbook list. For Each Cell In Rng ' Get the worksheet count for the workbook. ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & WkbPath & Cell _ & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;""" Conn.Open ConnStr Set Cat.ActiveConnection = Conn ' Copy the count to the cell one column to right of the workbook name in the list. Cell.Offset(n, 1) = Cat.Tables.Count Conn.Close Next Cell ' Clean up. Set Cat = Nothing Set Conn = Nothing End Sub
hình ảnh: https: //www.office-skill.site/images/wp-content-uploads-2015-07-img37.png [img3, width = 796, height = 490]
===
-
Khi chúng ta chạy macro, chúng ta sẽ nhận được số lượng trang tính. Tham khảo ảnh chụp nhanh dưới đây:
Lưu ý: macro trên sẽ hoạt động đối với tiện ích mở rộng .xlsx & .xls và không hoạt động đối với tiện ích mở rộng hỗ trợ Macro .xlsm.
Tất cả các tệp trên đều có phần mở rộng .xlsx Hãy để chúng tôi thêm trang tính excel giả, tức là Trang 10 Trong trường hợp chúng tôi có một tệp cùng tên có phần mở rộng .xlsx & .xls, thì chúng tôi cần đề cập đến tên của tệp với các phần mở rộng tương ứng tốt trong tệp thử nghiệm của chúng tôi (cột A) để macro có thể xác định tệp chúng tôi đang đề cập đến và cho chúng tôi kết quả chính xác Nếu chúng tôi chưa đề cập hoặc đã bỏ qua phần mở rộng cho tệp có cùng tên, thì macro sẽ đưa ra cho chúng tôi số lượng phần mở rộng .xlsx. Tham khảo ảnh chụp nhanh dưới đây:
-
Để có số trang cho Trang 10 có phần mở rộng .xlsx & .xls, chúng ta cần đề cập đến tên tệp với phần mở rộng tương ứng của chúng. Ảnh chụp nhanh của đầu ra cuối cùng được mô tả dưới đây:
Kết luận: Sử dụng mã macro ở trên, chúng ta có thể đếm số lượng trang tính trong nhiều tệp và nếu yêu cầu để nhận được kết quả tùy chỉnh, chúng ta có thể thực hiện một chút sửa đổi trong mã VBA.
Nếu bạn thích blog của chúng tôi, hãy chia sẻ nó với bạn bè của bạn trên Facebook. Và bạn cũng có thể theo dõi chúng tôi trên Twitter và Facebook.
Chúng tôi rất muốn nghe ý kiến từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện, bổ sung hoặc đổi mới công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi tại [email protected]