Hầu hết người đọc đã biết rằng bạn có thể tạo các hàm và chương trình con bằng VBA. Điều này không khác gì so với tên gọi của VBA, Visual Basic. Thông thường, một macro hiển thị trong danh sách macro khi bạn hiển thị hộp thoại Macro (nhấn Alt + F8), trừ khi một trong ba điều kiện được đáp ứng:

  • Macro là một hàm. Các hàm thường trả về thông tin và chúng yêu cầu thông tin được chuyển cho chúng. Vì việc chạy một macro từ danh sách macro không cho phép một trong hai điều này xảy ra, nên các số liệu Excel không cần phải liệt kê nó. Các hàm do người dùng định nghĩa, khá hữu ích trong Excel, không được hiển thị trong hộp thoại Macro vì xét cho cùng, chúng là các hàm.

  • Macro là một chương trình con có các tham số. Excel giả định rằng vì các tham số là cần thiết và bạn không thể cung cấp các tham số bằng cách chọn chương trình con từ danh sách macro, nên không cần phải liệt kê nó.

  • Chương trình con đã được khai báo là Private. Điều này có nghĩa là chương trình con chỉ hữu ích để viết mã trong mô-đun mà nó được khai báo.

Loại macro duy nhất được liệt kê trong hộp thoại Macro là một chương trình con không riêng tư không có tham số. Tuy nhiên, trong một số tình huống nhất định, bạn cũng có thể không muốn những thứ được liệt kê. Ví dụ, bạn có thể đã tạo ra một số chương trình con phổ quát không có tác dụng gì nếu được gọi riêng; chúng được thiết kế để được gọi từ mã khác. Ví dụ: hãy xem xét macro sau:

Sub MySub()

MsgBox "We are running the macro"

End Sub

Macro này sẽ xuất hiện trong hộp thoại Macro. Nếu bạn không muốn nó xuất hiện, có một số giải pháp bạn có thể theo đuổi, tất cả đều trở nên hiển nhiên khi kiểm tra ba cách mà macro bị loại trừ khỏi danh sách macro. Giải pháp tiềm năng đầu tiên là kiểm tra mã của bạn và tìm hiểu xem nó có thực sự “phổ biến” hay không. Bạn có cần mã từ nhiều mô-đun đơn lẻ không? Nếu không, hãy khai báo chương trình con Private; nó sẽ không xuất hiện trong hộp thoại Macro. Do đó, macro vấn đề trước đó trở thành như sau:

Private Sub MySub()

MsgBox "We are running the macro"

End Sub

Cách thứ hai để ẩn macro là chỉ cần chuyển nó thành một hàm.

Điều này nghe có vẻ kỳ lạ, đặc biệt nếu bạn không muốn trả về bất kỳ giá trị nào, nhưng nó hoàn toàn cho phép. Trong VBA, một hàm không phải trả về giá trị. Trong trường hợp không khai báo giá trị trả về một cách rõ ràng, hàm sẽ trả về kết quả mặc định (ví dụ: Boolean trả về giá trị False, chuỗi trả về “”, v.v.) Vì vậy, thủ tục vấn đề có thể được thay đổi thành một hàm và được khai báo như hình dưới đây:

Function MySub() As Boolean     MsgBox "We are running the macro"

End Function

Thủ tục này không hiển thị trong hộp thoại Macro và không yêu cầu đối số. Nó trả về False theo mặc định, nhưng kết quả này có thể bị bỏ qua. Tùy thuộc vào bản chất của chương trình con mà bạn đang thay đổi, có thể có lợi cho bạn khi thực sự cho phép hàm được chuyển đổi trả về True hoặc False tùy thuộc vào mức độ thành công của những gì đang được thực hiện trong mã. Trong trường hợp này, hàm được chuyển đổi là một hàm thực và không thực sự là một chương trình con giả, vì nó đang trả về một giá trị nào đó.

Giải pháp tiềm năng thứ ba là sử dụng một số tham số giả với chương trình con. Bạn không cần phải làm bất cứ điều gì với chúng trong chính chương trình con, nhưng bằng cách bao gồm chúng, thủ tục không được liệt kê trong danh sách macro. Trong trường hợp này, chương trình con sự cố được thay đổi thành một cái gì đó giống như sau:

Sub MySub(Void As Integer)

MsgBox "We are running the macro"

End Sub

Bây giờ thủ tục không được liệt kê trong danh sách macro, nhưng bạn cần thay đổi cách gọi chương trình con. Bạn phải sửa đổi mọi trường hợp để một tham số được truyền, mặc dù nó không bao giờ được sử dụng.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (9904) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: