With là gì?

tuhocvba

Administrator
Thành viên BQT
Khi các bạn dùng chức năng Record macro, các bạn sẽ thấy đoạn code như dưới đây:
Mã:
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
Vậy With ở đây là gì?

Đây là cách nói giản lược chủ ngữ.
Ví dụ tôi có người bạn là anh Hoàng.
Anh Hoàng xuất thân ở phú thọ.
Anh Hoàng đẹp trai.
Anh Hoàng giỏi code.
Anh Hoàng nhiều tiền.

Thì ta có thể nói như sau:

Với anh Hoàng ấy nhé:
Xuất thân Phú Thọ
Đẹp trai
Giỏi code
Nhiều tiền
Xin hết

Đầu tiên, chúng ta nói "Với anh Hoàng ấy nhé", đây là câu vào đề, bắt đầu câu chuyện liên quan tới anh Hoàng. Chính vì thế, sau đó chúng ta kể về các đặc điểm của anh Hoàng. Như vậy, dù cho nói bao nhiêu đặc điểm của anh Hoàng, ta cũng không cần nhắc tới chủ ngữ "anh Hoàng" nữa.
Câu chuyện trên chính là nói về With.
Kết thú là End With có nghĩa là câu chuyện tới đây là hết.

(Còn nữa)
Nguồn:
 

giaiphapvba

Administrator
Thành viên BQT
Như vậy với đoạn code:
Mã:
Range("A1").Value = "tuhocvba.net"
Range("A1").Interior.ColorIndex = 3
Range("A1").Font.ColorIndex = 2
Range("A1").NumberFormat = "@"
Có thể dịch như sau:

Với Cells A1 ấy nhé:
Điền giá trị vào là "tuhocvba.net"
Tô màu nền cho nó là màu đỏ
Tô màu cho chữ là màu trắng
Kiểu hiển thị là kiểu ký tự
Kết thúc câu chuyện ở đây nhé.

Tóm lại With~End With là để giản lược với thao tác giành cho đối tượng. Thay vì nói đầy đủ thao tác cho đối tượng này sẽ là... thì bây giờ nếu dùng With và End Wtih thì nói thao tác là...
Khi lệnh With được biên dịch, thì VBA sẽ sử dụng các biến đối tượng (Object) là biến nội bộ và thực thi đối với các câu lệnh trong With và nó được giải phóng khi câu lệnh End With được thực thi.
Để dễ hiểu hơn, các bạn hãy nhìn hai đoạn code dưới đây:
Code 1:
With Range("A1")
    .Value = 100
End With
Code 2:
Dim xxx As Range
Set xxx = Range("A1")
xxx.Value = 100
Set xxx = Nothing
Hai đoạn code trên có ý nghĩa tương đương, và đây chính là cách chương trình biên dịch Code 1, thứ mà máy tính hiểu từ Code 1 được thể hiện ra bằng code 2.
Biến số 「xxx」 với tư cách là biến nội bộ trong chương trình được sử dụng, tên nó là gì thì người dùng không biết. Khi gặp câu lệnh With, máy tính sẽ sử dụng một biến số nội bộ như vậy để thực thi các dòng code bên trong, và sẽ giải phóng biến số ấy (「xxx」) sau khi lệnh End With được thực thi. (tương đương với Set xxx = Nothing )
(Hết)
 
Top