Làm thế nào để sử dụng VBA cho Mỗi vòng lặp? (với Ví dụ Excel)

Excel VBA cho mỗi vòng lặp

VBA For Each Loop đi qua tất cả tập hợp các đối tượng hoặc mục và thực hiện một tập hợp các hoạt động tương tự. Nó sẽ xem xét tất cả các đối tượng được chỉ định có sẵn và thực hiện hoạt động được hướng dẫn trong mỗi đối tượng.

Trong VBA, bắt buộc phải hiểu các vòng lặp trong VBA. Một vòng lặp cho phép bạn thực hiện cùng một loại hoạt động cho nhiều ô hoặc đối tượng trong excel. Trong bài viết hôm nay, chúng ta sẽ tập trung vào cơ chế For Each Loop.

Cú pháp

Đối với Mỗi vòng lặp có thể lặp lại qua tất cả các tập hợp các đối tượng hoặc mục. Một bộ sưu tập không có gì khác ngoài “Tất cả các sổ làm việc đã mở”, “Tất cả các trang tính trong một sổ làm việc”, “Tất cả bộ sưu tập các hình dạng và biểu đồ trong sổ làm việc”.

Hãy nhìn vào cú pháp.

Đối với mỗi đối tượng trong bộ sưu tập phải làm gì? Đối tượng tiếp theo

Ví dụ: Bạn có 10 trang tính trong sổ làm việc của mình và bạn muốn ẩn tất cả các trang tính ngoại trừ trang bạn đang ở trong đó. Bạn có thể ẩn theo cách thủ công, vâng bạn có thể nhưng nếu bạn có 100 trang tính như vậy thì đó không phải là điều nhàm chán và mất thời gian. -công việc tích lũy để làm. Bạn có thể làm điều này bằng cách sử dụng cho mỗi vòng lặp.

Làm thế nào để sử dụng For Each Loop trong VBA? (Ví dụ)

Bạn có thể tải xuống mẫu VBA cho mỗi vòng lặp này tại đây - VBA cho mỗi mẫu vòng lặp

Ví dụ # 1 - Chèn cùng một văn bản trong tất cả các trang tính

Chúng ta sẽ xem cách sử dụng FOR EACH trong VBA với một ví dụ đơn giản. Giả sử bạn có 5 trang tính trong một sổ làm việc và bạn muốn chèn từ “Xin chào” vào tất cả các trang tính trong ô A1.

Chúng tôi có thể làm điều này với CHO TỪNG LOOP. Một điều bạn cần nhớ ở đây là chúng tôi thực sự thực hiện hoạt động này trong từng trang tính, không phải trong cùng một trang tính. Làm theo các bước dưới đây để viết mã VBA.

Bước 1: Khởi động macro excel.

Mã:

 Sub For_Each_Example1 () End Sub 

Bước 2: Vì chúng ta đang đề cập đến bảng tính nên khai báo biến là “Trang tính”.

Mã:

 Sub For_Each_Example1 () Dim Ws As Worksheet End Sub 

Bước 3: Bây giờ sử dụng FOR EACH LOOP, chúng ta cần tham chiếu từng trang tính trong sổ làm việc đang hoạt động.

Mã:

 Sub For_Each_Example1 () Dim Ws As Worksheet Cho mỗi Ws Trong ActiveWorkbook.Worksheets Next Ws End Sub 

Bước 4: Bây giờ viết những gì chúng ta muốn làm trong mỗi trang tính. Trong mỗi trang tính, chúng ta cần đặt từ “Xin chào” vào ô A1.

Mã: 

 Sub For_Each_Example1 () Dim Ws As Worksheet Cho Mỗi W trong ActiveWorkbook.Worksheets Ws.Range ("A1"). Value = "Hello" Next Ws End Sub 

Bước 5: Bây giờ chạy mã này theo cách thủ công thông qua tùy chọn hoặc nhấn phím tắt F5, không quan trọng bạn có bao nhiêu trang tính, nó sẽ chèn Từ “Xin chào” trong tất cả các trang tính.

Ví dụ # 2 - Ẩn tất cả các trang tính

Như đã nói trước đó trong bài viết, điều gì sẽ xảy ra nếu bạn có hàng trăm trang tính cần ẩn ngoại trừ trang tính của bạn. Sử dụng Đối với mỗi vòng lặp, chúng ta có thể ẩn tất cả các trang tính trong excel.

Bước 1: Bắt đầu macro với tên của bạn.

Mã:

 Sub For_Each_Example2 () End Sub 

Bước 2: Khai báo biến là “ Ws ”.

Mã:

 Sub For_Each_Example2 () Dim Ws As Worksheet End Sub 

Bước 3: Bây giờ trong mỗi trang tính việc bạn cần làm là ẩn trang tính.

Mã:

 Sub For_Each_Example2 () Dim Ws As Worksheet Cho Mỗi W trong ActiveWorkbook.Worksheets Ws.Vosystem = xlSheetVeryHidden Next Ws End Sub 

Bước 4: Nhưng nếu bạn chạy đoạn mã trên, nó sẽ cố gắng ẩn tất cả các trang tính nhưng excel cần ít nhất một trang tính để hiển thị. Vì vậy, chúng ta cần cho biết trang tính nào để không ẩn.

Mã:

 Sub For_Each_Example2 () Dim Ws As Worksheet Cho mỗi Ws Trong ActiveWorkbook.Worksheets If Ws.Name "Main Sheet" Then Ws.Vosystem = xlSheetVeryHidden End If Next Ws End Sub 

hiệu toán tử có nghĩa là không bằng trong VBA .

Vì vậy, mã cho biết khi bạn đang lặp lại tất cả các trang tính trong sổ làm việc đang hoạt động chỉ ẩn nếu tên trang tính không bằng tên trang tính của Trang tính chính.

Điều này có thể được thực hiện bằng cách sử dụng câu lệnh IF trong VBA. Viết mã dưới dạng IF Ws. Tên “Trang tính chính” Sau đó ẩn hoặc nếu nó bằng tên trang tính “Trang tính chính” thì không ẩn.

Bước 5: Bây giờ hãy chạy mã bằng cách sử dụng phím F5 hoặc sau đó theo cách thủ công, nó sẽ ẩn tất cả trang tính ngoại trừ trang có tên là “Trang tính chính”.

Ví dụ # 3 - Hiện tất cả các trang tính

Chúng tôi đã thấy cách ẩn tất cả các trang tính ngoại trừ trang tính đang ở trong đó. Tương tự như vậy, chúng tôi cũng có thể hiện tất cả các trang tính.

Chúng ta chỉ cần thay đổi mã từ xlSheetVeryHidden thành xlSheetVible.

Mã:

 Sub For_Each_Example3 () Dim Ws As Worksheet Cho mỗi Ws Trong ActiveWorkbook.Worksheets Ws.Vosystem = xlSheetVosystem Tiếp theo Ws End Sub 

Ở đây chúng ta không cần điều kiện IF vì chúng ta đang giải nén tất cả các trang tính. Nếu bạn không muốn hiện bất kỳ trang tính cụ thể nào thì bạn có thể sử dụng điều kiện IF và cung cấp tên trang tính.

Ví dụ # 4 - Bảo vệ và Bỏ bảo vệ Tất cả Trang tính

Bảo vệ Tất cả Trang tính: Chúng tôi có thể bảo vệ tất cả các trang tính trong sổ làm việc chỉ bằng một đoạn mã. Tất cả các mã đều giống nhau, điều duy nhất chúng ta cần làm ở đây là thay vì Ws. Có thể nhìn thấy chúng ta cần đặt mã Ws. Bảo vệ và nhập mật khẩu.

Mã:

 Sub For_Each_Example4 () Dim Ws as Worksheet cho mỗi Ws trong ActiveWorkbook.Worksheets Ws.Protect Password: = "Excel @ 2019" Next Ws End Sub 

Bỏ bảo vệ tất cả các trang tính: Trên một lưu ý tương tự, sử dụng vba, chúng tôi cũng có thể bỏ bảo vệ tất cả các trang tính được bảo vệ trong sổ làm việc. Chúng ta chỉ cần đặt từ Unprotect và mật khẩu.

Mã:

 Sub For_Each_Example6 () Dim Ws as Worksheet cho từng W trong ActiveWorkbook.Worksheets Ws.Unprotect Password: = "Excel @ 2019" Next Ws End Sub 

Những điều cần ghi nhớ

  • Mỗi là bộ sưu tập các đối tượng.
  • Nó sẽ xem xét tất cả các đối tượng được chỉ định trong sổ làm việc được chỉ định.
  • Trong khi khai báo biến, chúng ta cần tham chiếu đến đối tượng nào. Ví dụ: Trang tính, Sổ làm việc, Biểu đồ, v.v.

$config[zx-auto] not found$config[zx-overlay] not found