image

Khối With – End With trong VBA được sử dụng để nói với VBA rằng chúng ta sẽ sử dụng đối tượng đã cho và nó sẽ xem xét các thuộc tính của đối tượng đã cho chỉ khi chúng ta sử dụng toán tử dấu chấm. Chúng ta sẽ xem các ví dụ sau trong bài viết này.

Cú pháp With – End With Block

With [Object]

'Code to alter or use [Object]

'--

'--

End With

Vì vậy, bây giờ chúng ta đã biết cú pháp của khối With – End With, chúng ta hãy xem cách sử dụng của nó.

Ví dụ về With – End With Block Giả sử tôi muốn thực hiện một số thay đổi đối với phạm vi A2: A10. Tôi muốn chọn phạm vi này, thay đổi màu tô, kiểu phông chữ, v.v. Nói chung, tôi sẽ làm như thế nào? Chắc là như thế này:

Sub test()

Range("A1:A10").Select

Range("A1:A10").Interior.ColorIndex = 8

Range("A1:A10").Font.Name = "Algerian"

Range("A1:A10").Font.ColorIndex = 12

Range("A1:A10").Font.Underline = xlUnderlineStyleDouble

Range("A1:A10").Copy Range("B1:B10")

Range("A1:A10").Clear

End Sub

Ở trên chọn phạm vi A1: A10. Thay đổi màu nội thất của phạm vi thành chỉ số màu 8. Thay đổi phông chữ thành Algeria. Thay đổi màu của phông chữ thành chỉ số màu 12. Gạch dưới văn bản trong phạm vi bằng hai gạch chân.

Sau đó, nó sao chép phạm vi A1: A10 sang phạm vi B1: B10 của cùng một trang tính. Cuối cùng, nó xóa phạm vi A1: A10.

Bạn có thể nhận thấy rằng để thực hiện mọi hoạt động với phạm vi A1: A10, chúng ta phải viết nó mọi lúc. Sau đó, toán tử dấu chấm truy cập các thuộc tính của nó. Điều này làm giảm tốc độ xử lý và tăng chi phí công việc cho các lập trình viên VBA. Cách thay thế để làm điều này là sử dụng khối With: Đoạn mã dưới đây thực hiện tương tự như đoạn mã trên nhưng nhanh hơn.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

.Font.Name = "Algerian"

.Font.ColorIndex = 12

.Font.Underline = xlUnderlineStyleDouble

.Copy Range("B1:B10")

.Clear

End With

End Sub

image

Hãy xem một ví dụ khác.

Nếu bạn đã tạo một đối tượng của Outlook Mail thì bạn có thể sử dụng đối tượng đó để khởi tạo tất cả các thuộc tính của nó và sử dụng các phương pháp.

Set outMail = Outlook.Application.CreateItem(0)

With outMail

.To = "abcd.mail.com" 'Mandatory. Here you define the destination mail id.

.cc = "cc.mail.com" 'optional. Cc mail id if you want.

.BCC = "bcc.mail.com" 'optional. Bcc mail id if you want.

.Subject = subj 'should have. The massage on mail body.

.Body = msg 'optional. The massage on mail body.

.Attachments.Add "C:/exceltip.com\test.xlsx"

.Send

End With

Nó hoạt động như thế nào?

Chà, khi chúng ta viết With Range (“A1: A10”), vba sẽ khóa tham chiếu của nó đến phạm vi đối tượng (“A1: A10”). Vì vậy, bất cứ khi nào chúng ta viết toán tử dot (.), VBA liệt kê tất cả các thành viên của lớp phạm vi này sẽ chỉ ảnh hưởng đến đối tượng Phạm vi (“A1: A10”) hoặc bất kỳ đối tượng nào bạn đã đề cập. Khóa tham chiếu giải phóng khi VBA đọc câu lệnh End With.

Lồng với các khối Chúng ta có thể có một khối trong một khối khác. Trong ví dụ trên, chúng tôi đã sử dụng một đối tượng phạm vi để chọn nó. Sau đó, chúng tôi sử dụng Range.Font nhiều lần để làm việc với các phông chữ. Điều này một lần nữa lặp đi lặp lại. Đoạn mã trên cũng có thể được viết như thế này:

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

.Copy Range("B1:B10")

.Clear

End With

End Sub

Bên trong với khối phải tham chiếu đến một đối tượng là thành viên con của đối tượng bên ngoài. Chúng ta có thể tham chiếu đến bên ngoài với as object with và bên trong With as Child With. Khi bạn bắt đầu bên trong bằng, đối tượng sẽ được viết bằng toán tử dấu chấm đứng trước.

Khi bạn là một đứa trẻ, bạn không thể truy cập các thuộc tính cụ thể của cha mẹ. Ví dụ, mã dưới đây là sai.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

'The below code will generate error as copy and clear methods does not belong to font class.

.Copy Range("B1:B10")

.Clear

End With

End With

End Sub

Đủ điều kiện với khối Nếu tôi muốn thực hiện một số thay đổi với phông chữ của phạm vi A1: A10 của sheet2 trong mã chứa sổ làm việc thì chúng ta nên sử dụng khối đủ điều kiện.

Hai mã dưới đây sẽ hoạt động giống nhau.

Sub test2()

With ThisWorkbook

With .Sheets("Sheet2")

With .Range("A1:A10")

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End With

End With

End With

End Sub
'Fully qualified with block

Sub test3()

With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End Sub

Bạn có thể thấy sự khác biệt. Vì vậy, khi bạn biết rằng bạn sẽ sử dụng nhiều phương thức và thuộc tính từ một đối tượng, hãy đặt một cái tên đủ điều kiện ngay từ đầu. Nếu bạn sẽ sử dụng các đối tượng con thì hãy sử dụng cách tiếp cận trước đó. Các lập trình viên có kinh nghiệm sử dụng cả hai phương pháp này trong các tình huống phù hợp.

Vì vậy, các bạn, đây là cách chúng ta sử dụng khối With – End With trong VBA. Tôi hy vọng tôi đã giải thích đủ và bài viết này đã giúp bạn hiểu khái niệm With – End With. Nếu bạn có bất kỳ nghi ngờ nào liên quan đến bài viết này, hoặc bất kỳ chủ đề nào khác, hãy hỏi tôi trong phần bình luận bên dưới. Tôi rất sẵn lòng giúp đỡ bạn.

Bài viết liên quan:

Nó là một ngôn ngữ lập trình của Microsoft. Nó được sử dụng với các ứng dụng Microsoft Office như MSExcel, MS-Word và MS-Access trong khi các biến VBA là các từ khóa cụ thể.

Bạn muốn yêu cầu Excel không hiển thị cảnh báo này và xóa trang tính chết tiệt.

Bài viết phổ biến:

Chức năng Countif là cần thiết để chuẩn bị bảng điều khiển của bạn.