Home > Excel > Excel VBA > Tìm hiểu Sub trong VBA: Cú pháp và cách gọi Sub
Cần 2 bạn dịch bài về C#, Winform, .NET ... nói chung là viết bài về các công nghệ sử dụng code C#. Yêu cầu phải có kiến thức nên tảng lĩnh vực bạn chọn, nhuận bút 50k / bài. inbox mình nếu có nhu cầu nhé.

Tìm hiểu Sub trong VBA: Cú pháp và cách gọi Sub

Trong bài này mình sẽ giới thiệu về Sub trong VBA. Đây được xem là kiến thức nâng cao của các ngôn ngữ lập trình, nhưng vì trong VBA nội dung rất lộn xộn và có liên quan với nhau, vì vậy trong bài này mình sẽ giới thiệu sơ lược về Sub là gì và cách tạo Sub như thế nào.

Ở bài cách tạo Macro mình cũng có sử dụng Sub rồi nhưng không giải thích kỹ. Nếu bạn đã học qua ngôn ngữ Visual Basic rồi thì nó không quá khó, còn nếu bạn là người mới thì sẽ có chút bỡ ngỡ.

1. Sub trong VBA là gì?

Sub là tập hợp một hoặc nhiều đoạn code dùng để xử lý một nhiệm vụ hoặc tính năng nào đó. Sau khi tạo Sub thì ta có thể gọi đến để sử dụng rất nhiều lần mà không cần phải code lại.

Ví dụ: Bạn muốn viết đoạn code bôi đậm, in nghiêng và viết chữ hoa vào ô A1 thì code VBA có dạng như sau.

Range("A1").Font.Bold = True
Range("A1").Font.Italic = True
Range("A1").Value = UCase(ActiveCell.Value)

Mình muốn sử dụng đoạn code này trong 100 vị trí khác của một chương trình VBA cực lớn thì sẽ viết lại 100 lần, điều này gây ra khó khăn trong việc bảo trì sau này.

Thay vào đó ta sẽ gom đoạn code đó vào một Sub.

Sub BoldItalicUcaseText()
    Range("A1").Font.Bold = True
    Range("A1").Font.Italic = True
    Range("A1").Value = UCase(ActiveCell.Value)
End Sub

Và chỗ nào muốn sử dụng đoạn code này thì ta chỉ cần gọi như sau:

Call BoldItalicUcaseText()

Excel sẽ tự động gọi đến những đoạn code bên trong sub BoldItalicUcaseText nên việc chỉnh sửa và mở rộng sau này rất dễ dàng.

2. Cú pháp của Sub trong VBA

Để tạo một sub thì bạn sử dụng cú pháp sau:

Sub sub_name()
    ' Statement
End Sub

Trong đó:

  • sub_name là tên của sub mà bạn muốn đặt. Bạn không được sử dụng ký tự đặt biệt để đặt tên nhé.
  • statement là những đoạn code sẽ được chạy mỗi khi sub được gọi.

Ví dụ: Viết một Sub in ra thông báo "học VBA tại freetuts.net".

Sub showMessage()
    MsgBox "Hoc VBA tai freetuts.net"
End Sub

3. Tham số truyền vào Sub trong VBA

Tham số truyền vào sub chính là dữ liệu mà bạn muốn truyền vào Sub để xử lý.

Quay lại ví dụ ở phần 2 mình đã xuất ra một thông báo, tuy nhiên đó là một chuỗi fix cứng, nên khi gọi đến sub đó 1000 lần cả 1000 lần đều in ra thông báo "Hoc VBA tai freetuts.net".

Bây giờ mình muốn gọi đến sub đó nhưng nội dung tin nhắn của mỗi lần gọi là khác nhau thì làm thế nào? Rất đơn giản, ta sẽ sử dụng cú pháp tạo Sub có tham số như sau:

Sub sub_name(Var1 As Type1, Var2 As Type2, ...)
    ' Statement
End Sub

Máu chốt chính là đoạn code Var1 As Type1, Var2 As Type2, ...

Đây là danh sách các tham số truyền vào Sub, bạn có thể truyền một hoặc nhiều tham số, nếu nhiều thì chúng được cách nhau bởi dấu phẩy.

  • Var1, Var2 là tên tham số
  • Type1, Type2 là kiểu dữ liệu của tham số

Sửa lại Sub ở phần 2 để thỏa yêu cầu bài toán như sau:

Sub showMessage(x As String)
    MsgBox x
End Sub

Lúc này mỗi khi gọi đến Sub thì bạn phải truyền tham số vào nhé.

Call showMessage ("Thông báo 1")
Call showMessage ("Thông báo 2")
Call showMessage ("Thông báo 3")
....

Ví dụ khác: Viết sub in ra kết quả tính tổng hai số.

Sub sum2Number(a As String, b As String)
    total = a + b
    MsgBox total
End Sub

Cách gọi Sub này:

Call sum2Number(1, 2)

Trong đó 1 và 2 là hai giá trị mình truyền vào sub.

Khi truyền dữ liệu vào Sub phải đúng với kiểu dữ liệu mà Sub đã khai báo nhé, nếu không sẽ bị trình biên dịch báo lỗi đấy.

Trên là những chia sẻ về cách sử dụng Sub trong VBA. Đây là bài khá quan trọng vì ở những bài sau mình sử dụng khá nhiều, và mình cũng không giải thich lại đâu nhé.

-------------------#####-------------------

Khóa học Excel VBA:

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net.

BÀI VIẾT

notice png LIST home png HOME hot gif BÁO
LỖI
top png TOP