1. Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Khi có sự thay đổi trong chọn lựa ở bất kỳ sheet nào thuộc bảng tính (workbook) "này" ("này" có nghĩa ám chỉ bảng tính có code "kia") thì Workbook_SheetSelectionChange sẽ được gọi để thực hiện. Khi được gọi thì sẽ có 2 tham số được truyền vào: sh chỉ ra đối tượng sheet mà ở đó "vừa" có sự chọn lựa, và Target chỉ ra vùng được chọn lựa trong sh. Vùng có thể là 1 ô, cũng có thể là nhiều ô. Vd. nếu tập tin có 10 sheet và ở thời điểm nào đó người dùng chọn vùng C3:H9 trong sheet Data thì sh = đối tượng Data, Target = vùng C3:H19.
2.
Dim rngData As Range
For Each rngData In Target.Cells (A)
Trong ngữ cảnh này In Target.Cells - (A) thì rngData là 1 ô (1 cell)
(A) -> duyệt từng ô (cell) trong vùng Target (trong vùng C3:H9 trên sheet Data)
3.
If rngData.HasFormula Then
Nếu ô rngData có chứa công thức thì:
4.
ActiveSheet.Protect ("abc")
Exit Sub
protect sheet đang hoạt động và kết thức macro hiện hành. Sheet đang hoạt động chính là sheet vừa có sự chọn lựa vùng, tức chính là sheet sh. Vậy để dễ hiểu hơn thì nên là: sh.Protect "abc".
5.
Else
Nếu không thì (tức nếu là ô không chứa công thức):
6.
ActiveSheet.Unprotect ("abc")
Bỏ protect. Cũng có thể là sh.Unprotect "abc"
Kết luận: trên cơ sở phân tích ta thấy:
1. Nếu vùng được chọn (Target) không có ô nào chứa công thức -> bước 4 không bao giờ được thực hiện. Chỉ toàn các bước 6 được thực hiện. Tức kết cục là sheet sh được Unprotect.
2. Nếu vùng được chọn (Target) có ít nhất 1 ô có công thức thì bước 4 sẽ được thực hiện 1 lần và ngay sau đó việc thực hiện macro được kết thúc. Tức kết cục là sheet sh được Protect.