Macro ẩn (Microsoft Word)
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 (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 macro từ danh sách macro không cho phép một trong hai điều này xảy ra, nên Word số liệu không cần phải liệt kê nó.
-
Macro là một chương trình con có các tham số. Word 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.
Kết quả của ba điều kiện này là loại macro duy nhất được liệt kê trong hộp thoại Macro là 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 sẽ không hiển thị trong hộp thoại Macro và không yêu cầu đối số. Nó sẽ 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 các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.
(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (1137) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Word (Word 2007 và sau này) tại đây: