Chương trình con VBA Excel: Cách gọi Sub trong VBA bằng ví dụ
⚡ Tóm tắt thông minh
Hàm con (Subroutine) trong Excel VBA là một nhóm các khối mã thực hiện một tác vụ mà không trả về giá trị nào. Trang này sẽ đề cập đến các quy tắc đặt tên, cú pháp của Sub, cách gọi Sub từ nút lệnh và sự khác biệt giữa Sub và Function.

Chương trình con trong VBA là gì?
A Chương trình con trong VBA là một đoạn mã thực hiện một tác vụ cụ thể được mô tả trong mã nhưng không trả về kết quả hoặc giá trị. Các chương trình con được sử dụng để chia các đoạn mã lớn thành các phần nhỏ có thể quản lý được. Các chương trình con có thể được gọi lại nhiều lần từ bất kỳ đâu trong chương trình.
Giả sử bạn đã tạo một giao diện người dùng với các hộp văn bản để chấp nhận dữ liệu đầu vào của người dùng. Bạn có thể tạo một chương trình con xóa nội dung của các hộp văn bản. Một chương trình con VBA Call phù hợp trong trường hợp như vậy vì bạn không muốn trả về bất kỳ kết quả nào.
Tại sao nên sử dụng chương trình con
- Chia mã thành mã nhỏ có thể quản lý được: Một chương trình máy tính trung bình có hàng ngàn dòng mã nguồn. Điều này làm tăng tính phức tạp. Các chương trình con giúp giải quyết vấn đề này bằng cách chia nhỏ chương trình thành các đoạn mã nhỏ dễ quản lý.
- Code khả năng tái sử dụng. Giả sử bạn có một chương trình cần truy cập cơ sở dữ liệu, hầu như tất cả các cửa sổ trong chương trình sẽ cần tương tác với cơ sở dữ liệu. Thay vì viết mã riêng cho các cửa sổ này, bạn có thể tạo một hàm xử lý tất cả các tương tác cơ sở dữ liệu. Sau đó, bạn có thể gọi nó từ bất kỳ cửa sổ nào bạn muốn.
- Các chương trình con và chức năng tự ghi lại tài liệu. Giả sử bạn có một hàm tính toánLoanInterest và một hàm khác có nội dung connectToDatabase. Chỉ cần nhìn vào tên của chương trình con/chức năng, lập trình viên sẽ có thể biết chương trình đó làm gì.
Trước khi ghi tên, trình biên dịch mong đợi tên đó tuân theo một số quy tắc ngắn.
Quy tắc đặt tên chương trình con và hàm
Để sử dụng các chương trình con và hàm, có một bộ quy tắc mà người ta phải tuân theo.
- Tên hàm gọi chương trình con hoặc VBA không được chứa dấu cách
- Tên hàm hoặc cuộc gọi VBA Excel phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới. Nó không thể bắt đầu bằng số hoặc ký tự đặc biệt
- Tên chương trình con hoặc hàm không thể là từ khóa. Từ khóa là một từ có ý nghĩa đặc biệt trong VBA. Những từ như Riêng tư, Phụ, Chức năng và Kết thúc, v.v. đều là ví dụ về từ khóa. Trình biên dịch sử dụng chúng cho các tác vụ cụ thể.
Khi đã chọn được một tên hợp lệ, bản khai báo sẽ tuân theo một khuôn mẫu cố định.
Cú pháp chương trình con VBA
Bạn sẽ cần bật tab Nhà phát triển trong Excel để làm theo ví dụ này. Nếu bạn không biết cách bật tab Nhà phát triển thì hãy đọc hướng dẫn trên Các điều khiển VBA trong Excel
ĐÂY trong cú pháp,
Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String) 'do something End Sub
giải thích cú pháp
| Code | Hoạt động |
|---|---|
|
|
|
|
|
|
Chương trình con sau đây chấp nhận tên và họ và hiển thị chúng trong hộp thông báo.
Bây giờ chúng ta sẽ lập trình và thực hiện Thủ tục phụ này. Hãy xem điều này.
Cách gọi Sub trong VBA
Dưới đây là quy trình từng bước về cách Gọi Sub trong VBA:
- Thiết kế giao diện người dùng và đặt các thuộc tính cho điều khiển người dùng.
- Thêm chương trình con
- Viết mã sự kiện nhấp chuột cho nút lệnh gọi chương trình con
- Kiểm tra ứng dụng
Bước 1) Giao diện người dùng
Thiết kế giao diện người dùng như trong hình bên dưới.
Thiết lập các thuộc tính sau. Các thuộc tính mà chúng ta đang thiết lập:
| S / N | Kiểm soát | Bất động sản | Giá trị |
|---|---|---|---|
| 1 | LệnhNút1 | Họ tên | btnDisplayFullName |
| 2 | Chú thích | Chương trình con tên đầy đủ |
Giao diện của bạn bây giờ sẽ trông như sau.
Bước 2) Thêm chương trình con
- Nhấn Alt + F11 để mở cửa sổ mã
- Thêm chương trình con sau
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String) MsgBox firstName & " " & lastName End Sub
ĐÂY trong mã,
| Code | Hoạt động |
|---|---|
|
|
|
|
|
|
Bước 3) Gọi chương trình con
Gọi chương trình con từ sự kiện nhấn nút lệnh.
- Nhấp chuột phải vào nút lệnh như hình bên dưới. Chọn Xem. Code.
- Trình soạn thảo mã sẽ mở
Thêm đoạn mã sau vào trình soạn thảo mã cho sự kiện nhấp chuột vào nút lệnh btnDisplayFullName.
Private Sub btnDisplayFullName_Click() displayFullName "John", "Doe" End Sub
Cửa sổ mã của bạn bây giờ sẽ trông như sau
Lưu các thay đổi và đóng cửa sổ mã.
Bước 4) Kiểm tra mã
Trên thanh công cụ dành cho nhà phát triển, đặt chế độ thiết kế 'tắt'. Như hình dưới đây.
Bước 5) Bấm vào nút lệnh 'Chương trình con FullName'.
Bạn sẽ nhận được kết quả sau
Nút bấm rất tiện lợi, nhưng đó không phải là cách duy nhất để khởi chạy một chương trình con, và trong quá trình phát triển, nó hiếm khi là cách nhanh nhất.
Cách chạy chương trình con mà không cần nút bấm
Trong khi bạn vẫn đang viết mã, việc thêm một điều khiển vào trang tính chỉ để kiểm tra một chương trình con sẽ lãng phí thời gian. VBA cung cấp bốn cách khác để chạy chương trình con đó, và mỗi cách phù hợp với một thời điểm khác nhau trong chu kỳ phát triển.
- Nhấn phím F5 trong trình soạn thảo: Đặt con trỏ vào bất kỳ vị trí nào bên trong Sub và nhấn F5. Chương trình sẽ chạy ngay lập tức. Điều này chỉ hoạt động khi Sub không có tham số nào, vì VBA không có giá trị nào để cung cấp.
- Nhấn F8 để thực hiện các bước tiếp theo: Chạy cùng một lệnh, từng dòng một, để bạn có thể theo dõi sự thay đổi của từng biến trong cửa sổ Locals. Sử dụng lệnh này khi kết quả sai và bạn cần biết lỗi ở đâu.
- Sử dụng hộp thoại Macro: Trên tab Nhà phát triển, nhấp vào Macro, chọn tên và nhấp vào Chạy. Chỉ những Sub công khai không có đối số mới xuất hiện trong danh sách này, đó là lý do tại sao một Sub trợ giúp thường được khai báo là Private.
- Gọi từ một Sub khác: Đây là phương pháp được sử dụng cho bất kỳ Sub nào nhận tham số, và là phương pháp mà nút lệnh ở trên dựa vào.
Phương án cuối cùng có hai hình thức được chấp nhận. Viết tên hàm kèm theo các đối số đơn thuần đều được, và từ khóa Call tường minh cũng vậy, nhưng quy tắc dấu ngoặc đơn lại khác nhau giữa hai cách này.
Sub RunTheGreeting() ' Form 1: no Call keyword, no brackets displayFullName "John", "Doe" ' Form 2: Call keyword, brackets required Call displayFullName("Jane", "Roe") End Sub
Cả hai dòng đều thực hiện chính xác cùng một việc. Việc trộn lẫn hai dạng này, bằng cách viết dấu ngoặc mà không có từ khóa Call, là nguyên nhân phổ biến nhất gây ra lỗi biên dịch “Expected: =” khi một Sub nhận nhiều hơn một đối số.
Sự khác biệt giữa Sub và Function trong VBA
Sub và Function là hai loại thủ tục trong VBA, và người mới bắt đầu thường chọn sai loại. Câu hỏi quyết định rất đơn giản: mã gọi có cần trả về giá trị nào không?
| Tính năng | Sub | Chức năng |
|---|---|---|
| Trả về một giá trị | Không | Vâng, đã được gán cho tên hàm. |
| Đã khai báo với | Sub… End Sub | Hàm … Kết thúc hàm |
| Được gọi là | Một tuyên bố riêng biệt. | Một phần của biểu thức, ví dụ x = myFunc(2) |
| Có thể sử dụng trong ô bảng tính | Không | Vâng, như một hàm do người dùng định nghĩa |
| Sử dụng điển hình | Định dạng trang tính, xóa dữ liệu nhập, hiển thị thông báo | Tính tổng, chuyển đổi giá trị, tra cứu dữ liệu |
Sử dụng Sub khi mã tác động trực tiếp lên sổ làm việc, và một Hàm VBA Khi đoạn mã tạo ra một câu trả lời mà một thứ khác sử dụng.






