Hướng dẫn này sẽ chỉ cho bạn các ví dụ về cách sử dụng For Each Loop trong VBA. Nhấp vào đây để tìm hiểu thêm về các vòng lặp nói chung.
Cho mỗi vòng lặp
Vòng lặp For Each cho phép bạn lặp lại mỗi đối tượng trong một bộ sưu tập:
- Tất cả các ô trong một phạm vi
- Tất cả các trang tính trong một sổ làm việc
- Tất cả các sổ làm việc đang mở
- Tất cả các hình dạng trong một trang tính
- Tất cả các mục trong một mảng
- và hơn thế nữa!
Đối với mỗi: Ví dụ cơ bản
Các ví dụ này sẽ trình bày cách thiết lập vòng lặp For Each để lặp qua các loại đối tượng khác nhau.
Vòng qua các ô
Quy trình này sẽ lặp qua từng ô trong phạm vi A1: A10, đặt ô ở bên phải bằng với chính nó.
12345678 | Sub ForEachCell ()Làm mờ ô dưới dạng phạm viĐối với mỗi ô trong trang tính ("Sheet1"). Phạm vi ("A1: A10")Cell.Offset (0, 1) .value = Cell.valueÔ tiếp theoKết thúc Sub |
Vòng qua trang tính
Quy trình này sẽ lặp qua từng trang tính trong Sổ làm việc, bỏ ẩn từng trang tính.
12345678 | Sub ForEachSheets ()Dim ws As WorksheetCho mỗi ws trong trang tínhws.Vible = TrueTrang tiếp theoKết thúc Sub |
Loop Through Workbooks
Quy trình này sẽ lặp lại qua từng sổ làm việc, đóng từng sổ một.
12345678 | Sub ForEachWorkbooks ()Dim wb As WorkbookĐối với mỗi wb trong sổ làm việcwb.CloseTuần tiếp theoKết thúc Sub |
Loop Through Shapes
Quy trình này sẽ lặp qua từng hình dạng trong Sheet1, xóa từng hình dạng.
12345678 | Sub ForEachShape ()Dim Shp như hình dạngĐối với mỗi Shp Trong Trang tính ("Trang 1"). Hình dạngShp.DeleteShp tiếp theoKết thúc Sub |
Vòng qua các biểu đồ
Quy trình này sẽ lặp qua từng Biểu đồ trong Sheet1, xóa từng biểu đồ.
12345678 | Sub ForEachCharts ()Dim cht As ChartObjectĐối với mỗi cht Trong Trang tính ("Trang 1"). ChartObjectscht.DeleteCht tiếp theoKết thúc Sub |
Vòng qua PivotTables
Quy trình này sẽ lặp qua từng PivotTable trong Sheet1, xóa từng
12345678 | Sub ForEachPivotTables ()Làm mờ pvt dưới dạng PivotTableĐối với mỗi pvt Trong Trang tính ("Trang 1"). PivotTablespvt.ClearTablePvt tiếp theoKết thúc Sub |
Vòng qua các bảng
Quy trình này sẽ lặp qua từng Bảng trong Sheet1, xóa từng bảng.
12345678 | Sub ForEachTables ()Dim tbl As ListObjectĐối với mỗi tbl Trong Trang tính ("Trang 1"). ListObjectstbl.DeleteTbl tiếp theoKết thúc Sub |
Lặp qua các mục trong mảng
Quy trình này sẽ lặp qua từng mục trong Mảng, hiển thị từng giá trị trong hộp thư,
12345678910 | Sub ForEachItemInArray ()Dim arrValue làm biến thểLàm mờ mục dưới dạng biến thểarrValue = Mảng ("Mặt hàng 1", "Mặt hàng 2", "Mặt hàng 3")Đối với mỗi mục trong arrValueMục MsgBoxMục tiếp theoKết thúc Sub |
Vòng qua các con số
Thủ tục này sẽ lặp qua từng số trong một Mảng, hiển thị từng giá trị trong hộp thư,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 đến 3) dưới dạng số nguyênDim num như một biến thểarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30Đối với mỗi số trong arrNumberMsgbox NumSố tiếp theoKết thúc Sub |
Đối với mỗi trình tạo vòng lặp
Các ví dụ trong bài viết này được xây dựng với Trình tạo vòng lặp trong của chúng tôi Bổ trợ VBA: AutoMacro.
Các Trình tạo vòng lặp làm cho nó rất dễ dàng tạo ra mã để lặp qua các đối tượng. AutoMacro cũng chứa nhiều khác Trình tạo mã, Rộng Thư viện mãvà mạnh mẽ Công cụ mã hóa.
Cho mỗi - Nếu
Bạn cũng có thể sử dụng Câu lệnh If trong Vòng lặp để kiểm tra xem các đối tượng có đáp ứng các tiêu chí nhất định hay không, chỉ thực hiện các hành động trên các đối tượng đáp ứng tiêu chí đó. Đây là một ví dụ về lặp qua từng ô trong một phạm vi:
Đối với mỗi ô trong phạm vi - Nếu
1234567891011121314 | Sub If_Loop ()Làm mờ ô dưới dạng phạm viĐối với mỗi ô trong phạm vi ("A2: A6")Nếu Cell.Value> 0 ThìCell.Offset (0, 1) .Value = "Tích cực"ElseIf Cell.Value <0 Sau đóCell.Offset (0, 1) .Value = "Phủ định"KhácCell.Offset (0, 1) .Value = "Zero"Kết thúc nếuÔ tiếp theoKết thúc Sub |
Đối với từng ví dụ phổ biến
Đóng tất cả sổ làm việc
Quy trình này sẽ đóng tất cả các sổ làm việc đang mở, lưu các thay đổi.
123456789 | Sub CloseAllWorkbooks ()Dim wb As WorkbookĐối với mỗi wb trong sổ làm việcwb.Close SaveChanges: = TrueTuần tiếp theoKết thúc Sub |
Ẩn tất cả các trang tính
Thủ tục này sẽ ẩn tất cả các trang tính.
12345678 | Sub HideAllSheets ()Dim ws As WorksheetCho mỗi ws trong trang tínhws.Vible = xlSheetHiddenTuần tiếp theoKết thúc Sub |
Hiện tất cả các trang tính
Quy trình này sẽ hiện tất cả các trang tính.
12345678 | Sub UnhideAllSheets ()Dim ws As WorksheetCho mỗi ws trong trang tínhws.Vible = xlSheetVosystemTuần tiếp theoKết thúc Sub |
Bảo vệ tất cả các trang tính
Quy trình này sẽ bảo vệ tất cả các trang tính.
12345678 | Sub ProtectAllSheets ()Dim ws As WorksheetCho mỗi ws trong trang tínhws.Protect Password: = "…"Tuần tiếp theoKết thúc Sub |
Bỏ bảo vệ tất cả các trang tính
Quy trình này sẽ bỏ bảo vệ tất cả các trang tính.
12345678 | Sub UnprotectAllSheets ()Dim ws As WorksheetCho mỗi ws trong trang tínhws.Unprotect Mật khẩu: = "…"Tuần tiếp theoKết thúc Sub |
Xóa tất cả các hình dạng trên tất cả các trang tính
Quy trình này sẽ xóa tất cả các hình dạng trong sổ làm việc.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets ()Làm mờ trang tính dưới dạng trang tínhDim Shp như hình dạngCho mỗi ws trong trang tínhĐối với mỗi Shp Trong ws.Shp.DeleteShp tiếp theoTuần tiếp theoKết thúc Sub |
Làm mới tất cả PivotTable
Quy trình này sẽ làm mới tất cả PivotTable trên một trang tính.
12345678 | Sub RefreshAllPivotTables ()Làm mờ pvt dưới dạng PivotTableĐối với mỗi pvt Trong Trang tính ("Trang tính1"). PivotTablespvt.RefreshTablePvt tiếp theoKết thúc Sub |
Sử dụng cho mỗi trong Access VBA
Vòng lặp For Each hoạt động theo cùng một cách trong Access VBA cũng như trong Excel VBA. Ví dụ sau sẽ xóa tất cả các bảng trong cơ sở dữ liệu hiện tại.
123456789 | Sub RemoveAllTables ()Làm mờ tdf dưới dạng TableDefLàm mờ dbs dưới dạng cơ sở dữ liệuĐặt dbs = CurrentDbĐối với mỗi tdf Trong dbs.TableDefsDoCmd.DeleteObject tdf.NameVòngĐặt dbs = Không có gìKết thúc Sub |