Hướng dẫn này sẽ giải thích sự khác biệt giữa khai báo công khai và riêng tư trong VBA và cách chỉ định mô-đun là riêng tư.
Thủ tục phụ công khai và riêng tư
Các thủ tục (Sub và Functions) có thể được khai báo Riêng tư hoặc Công khai trong VBA. Nếu chúng ở chế độ Công khai, điều đó có nghĩa là bạn có thể nhìn thấy chúng từ bên trong Cửa sổ Macro Excel và chúng có thể được gọi từ bất kỳ đâu trong Dự án VBA của bạn. Nếu chúng là Riêng tư, chúng không thể được nhìn thấy trong Cửa sổ Macro Excel và chỉ có sẵn để được sử dụng trong Mô-đun mà chúng được khai báo (sử dụng các phương pháp thông thường, hãy xem phần cuối của bài viết này để biết cách truy cập các thủ tục riêng tư từ các mô-đun khác) .
Các hàm công khai có thể được gọi giống như các hàm Excel dựng sẵn trong trang tính Excel.
Ghi chú: Biến và Hằng cũng có thể là Công khai hoặc Riêng tư.
Cửa sổ Macro Excel
Theo mặc định, Macro Excel (hầu hết các Thủ tục VBA) được hiển thị cho người dùng sổ làm việc trong Cửa sổ Macro:
Đây được coi là Công cộng các thủ tục. Bạn có thể xác định rõ ràng các thủ tục là công khai bằng cách thêm “Công khai” trước câu lệnh Phụ:
123 | Public Sub HelloWorld ()MsgBox "Xin chào thế giới"Kết thúc Sub |
Nếu bạn không xác định quy trình là Công khai, quy trình đó sẽ được coi là Công khai.
Để khai báo một thủ tục là Riêng tư, chỉ cần thêm "Riêng tư" trước câu lệnh phụ của thủ tục:
123 | Sub riêng HelloEveryone ()MsgBox "Xin chào mọi người"Kết thúc Sub |
Quy trình thứ hai sẽ không hiển thị trong cửa sổ Macro đối với người dùng Excel, nhưng vẫn có thể được sử dụng trong mã VBA của bạn.
Thủ tục với các đối số
Các thủ tục phụ có thể có các đối số. Các đối số là đầu vào cho thủ tục con:
123 | Xin chào Sub (strName dưới dạng chuỗi)MsgBox "Xin chào" & strNameKết thúc Sub |
Nếu một thủ tục con có các đối số, nó sẽ không bao giờ xuất hiện trong Cửa sổ Macro bất kể nó có được khai báo Công khai hay không vì không có cách nào để khai báo các đối số.
Các hàm cũng sẽ không bao giờ xuất hiện trong Macro Window, bất kể chúng có được khai báo là Public hay không.
Các hàm công khai trong Excel có thể được sử dụng trực tiếp trong trang tính dưới dạng 'Hàm do Người dùng Xác định' (UDF). Về cơ bản, đây là một công thức tùy chỉnh có thể được gọi trực tiếp trong một trang tính. Chúng có thể được tìm thấy trong danh mục ‘Người dùng xác định’ trong cửa sổ ‘Chèn hàm hoặc có thể được nhập trực tiếp vào một ô.
Lập trình VBA | Code Generator làm việc cho bạn!
Sử dụng quy trình giữa các mô-đun trong Dự án VBA của bạn
Các thủ tục công khai có thể được gọi từ bất kỳ mô-đun hoặc biểu mẫu nào trong Dự án VBA của bạn.
Cố gắng gọi một thủ tục riêng tư từ một mô-đun khác sẽ dẫn đến lỗi (Lưu ý: xem phần cuối của bài viết này để biết cách khắc phục).
Ghi chú: Các thủ tục và biến công khai trong mô-đun lớp hoạt động hơi khác và nằm ngoài phạm vi của bài viết này.
Các mô-đun khác nhau, có thể lưu trữ các thủ tục có cùng tên, miễn là cả hai đều riêng tư.
Nếu hai hoặc nhiều thủ tục có cùng tên và được khai báo công khai, bạn sẽ gặp lỗi biên dịch 'Đã phát hiện tên mơ hồ' khi chạy mã.
Mô-đun riêng
Theo mặc định, các mô-đun là công khai.
Để đặt mô-đun ở chế độ riêng tư, bạn đặt từ khóa sau ở đầu mô-đun.
1 | Tùy chọn Mô-đun Riêng tư |
Nếu bạn khai báo một mô-đun là riêng tư, thì mọi thủ tục trong mô-đun sẽ không hiển thị cho người dùng Excel. Các thủ tục hàm sẽ không xuất hiện trong cửa sổ Chèn Hàm nhưng vẫn có thể được sử dụng trong trang tính Excel miễn là người dùng biết tên của hàm!
Các thủ tục phụ sẽ không xuất hiện trong Cửa sổ Macro nhưng vẫn có sẵn để sử dụng trong dự án VBA.
Truy cập một thủ tục riêng tư từ một mô-đun khác
Như đã đề cập ở trên, các Thủ tục Riêng tư không thể truy cập được trong các mô-đun mã khác bằng các phương pháp “bình thường”. Tuy nhiên, bạn có thể truy cập các thủ tục riêng tư bằng cách sử dụng Application.Run lệnh có sẵn trong VBA.
Hãy xem xét 3 mô-đun sau.
Mô-đun 2 là một Riêng tư Mô-đun với một Công cộng Thủ tục phụ, trong khi Mô-đun 3 là Công cộng mô-đun với một Riêng tư Thủ tục phụ.
Trong Module1, chúng ta có thể gọi Hello World - Tùy chọn Mô-đun Riêng tư ở trên cùng không ngăn chúng ta gọi Thủ tục phụ - tất cả những gì nó phục vụ là ẩn Thủ tục phụ trong Cửa sổ Macro.
Chúng tôi cũng không cần câu lệnh Call - nó ở đó để làm cho mã dễ đọc hơn.
Mã cũng có thể trông giống như sau:
1234 | Sub CallHelloFromPrivate ()'gọi một phụ từ Mô-đun Riêng tưChào thế giớiKết thúc Sub |
Chúng tôi cũng có thể chạy Thủ tục phụ HelloWorld bằng cách sử dụng VBA Application.Run chỉ huy.
Tuy nhiên, trong Module 3, thủ tục GoodMorningWorld đã được tuyên bố là Riêng tư. Bạn không thể gọi nó từ một mô-đun khác bằng cách sử dụng ‘bình thường’ nghĩa là câu lệnh Gọi.
Bạn phải sử dụng Application.RunCommand để chạy một Sub riêng tư từ một mô-đun khác.
1234 | Sub CallGoodMorning ()'chạy một phụ cá nhân từ một mô-đun công khaiApplication.Run ("GoodMorningWorld")Kết thúc Sub |
Lưu ý khi bạn sử dụng Application.RunCommand lệnh, bạn phải đặt tên Thủ tục phụ trong dấu phẩy ngược.
Nếu chúng tôi cố gắng sử dụng câu lệnh Gọi để chạy Thủ tục phụ GoodMorningWorld, sẽ xảy ra lỗi.