Hướng dẫn này sẽ trình bày cách sử dụng Hàm MsgBox của VBA để hiển thị hộp thư cho người dùng (bao gồm Hộp thư YesNo). Bạn cũng có thể quan tâm đến bài viết của chúng tôi về InputBoxes.
Hàm MsgBox VBA
Trong VBA, thật dễ dàng để hiển thị một MsgBox đơn giản:
1 | MsgBox "Đây là một hộp thư" |
Tuy nhiên, bạn có thể làm được nhiều điều hơn là hiển thị một hộp thông báo OK đơn giản. Hãy nhanh chóng xem xét ví dụ phức tạp trước khi chúng ta đi sâu vào chi tiết cụ thể…
VBA Có không có hộp thông báo
Dưới đây, chúng tôi sẽ tạo một hộp thông báo với:
- Tiêu đề "Tiêu đề hộp thư" và lời nhắc "Văn bản"
- Một biểu tượng dấu chấm hỏi
- Tùy chọn Có / Không thay vì "OK" đơn giản
- Nút mặc định = 'Không'
123 | Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Văn bản", vbQuestion + vbYesNo + vbDefaultButton2, "Tiêu đề hộp thư") |
Hộp thư sẽ trả về vbYes hoặc vbNo tùy thuộc vào sự lựa chọn của người dùng. Sau đó, bạn có thể thực hiện các hành động khác nhau dựa trên lựa chọn:
12345 | Nếu answer = vbYes thìMsgBox "Có"KhácMsgBox "Không"Kết thúc nếu |
Trong phần tiếp theo, chúng tôi sẽ chỉ cho bạn tất cả các tùy chọn có sẵn cho bạn khi tạo hộp thư. Sau đó, chúng tôi sẽ giới thiệu cho bạn cú pháp của Hàm MsgBox và cuối cùng đi qua các ví dụ về hộp thông báo khác.
Tùy chọn hộp thư VBA
Hãy nhìn vào hình ảnh bên dưới. Tại đây bạn sẽ thấy (gần như) tất cả các tùy chọn có sẵn cho bạn khi tạo hộp thư. Chú ý đến các biểu tượng và các nút khác nhau.
Đây là ảnh chụp màn hình của “MessageBox Builder” từ Phần bổ trợ VBA Premium của chúng tôi: AutoMacro. Trình tạo MessageBox cho phép bạn nhanh chóng thiết kế hộp thư mong muốn và chèn mã vào mô-đun mã của bạn. Nó cũng chứa nhiều trình xây dựng mã khác, một thư viện mã VBA mở rộng và một loạt các công cụ mã hóa. Đó là điều bắt buộc đối với bất kỳ nhà phát triển VBA nào.
Cú pháp của hàm MsgBox
MsgBox (dấu nhắc [, các nút] [, tiêu đề] [, tệp trợ giúp, ngữ cảnh])
lời nhắc (Bắt buộc) - Đây là văn bản hộp tin nhắn chính.
nút - Chọn các nút để hiển thị. Nếu bỏ qua, "OKonly". Tại đây bạn cũng có thể chỉ định biểu tượng sẽ hiển thị và nút mặc định.
chức vụ - Tiêu đề ở đầu hộp thư. Nếu bỏ qua, tên của ứng dụng hiện tại sẽ được hiển thị (ví dụ: Microsoft Excel).
hồ sơ trợ giúp - Chỉ định tệp trợ giúp có thể được truy cập khi người dùng nhấp vào nút ‘Trợ giúp’. Nếu được chỉ định, thì bạn cũng phải thêm ngữ cảnh (bên dưới)
định nghĩa bài văn - Biểu thức số đại diện cho số ngữ cảnh Trợ giúp được chỉ định cho chủ đề Trợ giúp thích hợp.
Bạn có thể bỏ qua các đối số trong tệp trợ giúp và ngữ cảnh. Tôi chưa bao giờ thấy chúng được sử dụng.
Tùy chỉnh Tiêu đề và Lời nhắc Hộp Thư
Chức năng MsgBox cho phép bạn tùy chỉnh tiêu đề và lời nhắc như sau:
1 | Msgbox "Lời nhắc" ,, "Tiêu đề" |
Một vi dụ khac:
123 | Sub MsgBoxPromptTitle ()MsgBox "Hoàn thành Bước 1. Nhấp OK để chạy bước 2." ,, "Bước 1/5"Kết thúc Sub |
Quan trọng! Bạn phải nhớ bao quanh văn bản của bạn bằng các trích dẫn.
MessageBox LineBreaks
Bạn cũng có thể thêm ngắt dòng vào lời nhắc hộp thư của mình bằng ‘vbNewLine’.
123 | Sub MsgBoxPromptTitle_NewLine ()MsgBox "Hoàn thành Bước 1." & vbNewLine & "Nhấp OK để chạy Bước 2.", "Bước 1/5"Kết thúc Sub |
Lưu ý rằng chúng tôi sử dụng ký hiệu & để nối văn bản với nhau. Bạn có thể tìm hiểu thêm về cách sử dụng & với văn bản và các tùy chọn khác để chèn dấu ngắt dòng trong bài viết của chúng tôi về cách nối văn bản.
MsgBox các biểu tượng
VBA cung cấp cho bạn khả năng thêm một trong bốn biểu tượng được tạo sẵn vào hộp thư của bạn:
Biểu tượng không đổi | Biểu tượng |
---|---|
vbInformation | ![]() |
vbCritical | ![]() |
vbQuestion | ![]() |
vbExclamation | ![]() |
Hằng số Biểu tượng phải được đặt trong đối số nút:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Ví dụ câu hỏi", vbQuestionKết thúc Sub |
Thao tác này sẽ tạo hộp thông báo ‘OK’ mặc định với biểu tượng Câu hỏi:
Lưu ý cách khi bạn nhập, VBA Editor sẽ hiển thị cho bạn các tùy chọn có sẵn cho bạn:
Điều này rất hữu ích vì bạn không cần phải nhớ cú pháp hoặc tên chính xác của các biểu tượng hoặc nút.
Bây giờ chúng ta sẽ demo từng biểu tượng hộp tin nhắn:
Các biểu tượng MsgBox - Thông tin
123 | Sub MsgBoxInformationIcon ()MsgBox "Ví dụ về thông tin", vbInformationKết thúc Sub |
Biểu tượng MsgBox - Quan trọng
123 | Sub MsgBoxCriticalIcon ()MsgBox "Ví dụ quan trọng", vbCriticalKết thúc Sub |
Các biểu tượng MsgBox - Câu hỏi
123 | Sub MsgBoxQuestionIcon ()MsgBox "Ví dụ câu hỏi", vbQuestionKết thúc Sub |
Các biểu tượng MsgBox - Dấu chấm than
123 | Sub MsgBoxExclamationIcon ()MsgBox "Ví dụ về câu cảm thán", vbExclamationKết thúc Sub |
Dưới đây chúng ta sẽ nói về việc tạo các hộp thông báo với các bố cục nút khác nhau. Nếu bạn chọn một loại hộp thông báo khác, bạn sẽ cần thêm loại biểu tượng vào sau các nút bằng cách sử dụng dấu “+”:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Bạn có muốn tiếp tục không?", VbOKCancel + vbQuestionKết thúc Sub |
Biến MsgBox
Cho đến nay chúng tôi đã làm việc chủ yếu với hộp thông báo ‘OK’ mặc định. Hộp thông báo OK chỉ có một tùy chọn: Nhấn ‘OK’ để mã tiếp tục. Tuy nhiên, bạn cũng có thể chỉ định các nhóm nút khác: OK / Cancel, Yes / No, v.v.
Trong trường hợp đó, bạn sẽ muốn thực hiện các hành động khác nhau dựa trên nút nào được nhấn. Hãy xem một ví dụ.
Đây là hộp thông báo chúng tôi sẽ tạo:
Đây là toàn bộ mã (chúng tôi sẽ chia nhỏ nó tiếp theo):
123456789101112 | Sub MsgBoxVariable ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bạn có muốn tiếp tục không?", vbQuestion + vbYesNo)Nếu answer = vbYes thìMsgBox "Có"KhácMsgBox "Không"Kết thúc nếuKết thúc Sub |
Đầu tiên, chúng tôi gán đầu ra hộp thư cho một biến số nguyên.
123 | Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bạn có muốn tiếp tục không?", vbQuestion + vbYesNo) |
Tiếp theo, chúng tôi sử dụng If-Else để xác định việc cần làm dựa trên nút nào được nhấn:
12345 | Nếu answer = vbYes thìMsgBox "Có"KhácMsgBox "Không"Kết thúc nếu |
Hàm MsgBox trả về một giá trị nguyên (từ 1-7) vì vậy chúng tôi xác định biến là một kiểu số nguyên. Tuy nhiên, thay vì tham chiếu đến số nguyên, bạn có thể tham chiếu đến một hằng số (ví dụ: vbOK, vbCancel, v.v.). Nhìn vào bảng này để xem tất cả các tùy chọn:
Cái nút | Hằng số | Giá trị |
---|---|---|
VÂNG | vbOK | 1 |
Hủy bỏ | vb Hủy | 2 |
Huỷ bỏ | vbAbort | 3 |
Thử lại | vbRetry | 4 |
Phớt lờ | vbIgnore | 5 |
đúng | vbYes | 6 |
Không | vbNo | 7 |
Bây giờ chúng ta sẽ demo từng nhóm nút:
Hộp tin nhắn OK - vbOKOnly
Đây là hộp thư VBA tiêu chuẩn.
123456 | Sub MsgBox_OKOnly ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Ví dụ OKOnly", vbOKOnly)Kết thúc Sub |
OK Hủy hộp tin nhắn - vbOKCancel
123456789101112 | Sub MsgBox_OKCancel ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("OK Ví dụ Hủy", vbOKCancel)Nếu answer = vbOK thìMsgBox "OK"KhácMsgBox "Hủy"Kết thúc nếuKết thúc Sub |
Có Không Hộp thư - vbYesNo
123456789101112 | Sub MsgBox_YesNo ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Có Không Ví dụ", vbYesNo)Nếu answer = vbYes thìMsgBox "Có"KhácMsgBox "Không"Kết thúc nếuKết thúc Sub |
Có Không Hủy Hộp thư - vbYesNoCancel
1234567891011121314 | Sub MsgBox_YesNoCancel ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Có Không, Ví dụ về Hủy", vbYesNoCancel)Nếu answer = vbYes thìMsgBox "Có"ElseIf answer = vbNo Sau đóMsgBox "Không"KhácMsgBox "Hủy"Kết thúc nếuKết thúc Sub |
Hủy bỏ Thử lại Hộp thông báo Bỏ qua - vbAbortRetryIgnore
1234567891011121314 | Sub MsgBox_AbortRetryIgnore ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bỏ qua Ví dụ Bỏ qua Thử lại", vbAbortRetryIgnore)Nếu answer = vbAbort ThìMsgBox "Hủy bỏ"ElseIf answer = vbRetry Sau đóMsgBox "Thử lại"KhácMsgBox "Bỏ qua"Kết thúc nếuKết thúc Sub |
Thử lại Hộp thư Hủy - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Thử lại Ví dụ về Hủy", vbRetryCancel)Nếu answer = vbRetry Sau đóMsgBox "Thử lại"KhácMsgBox "Hủy"Kết thúc nếuKết thúc Sub |
Ví dụ về VBA MessageBox
Xác nhận hộp thông báo trước khi chạy Macro
Mã này sẽ hiển thị hộp Có Không Thông báo trước khi gọi macro. Nếu Có được nhấp vào, macro được gọi, nếu Không được nhấp vào, Macro không chạy.
12345678 | Sub Msgbox_BeforeRunning ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bạn có muốn chạy Macro1 không?", vbQuestion + vbYesNo)Nếu answer = vbYes thì hãy gọi Macro1Kết thúc Sub |
Hộp thư Có / Không - Thoát Sub
Tại đây chúng tôi sẽ xác nhận với người dùng xem có tiếp tục chạy macro hay không. Nếu Không được nhấp vào, mã sẽ thoát khỏi phụ, nếu không quy trình sẽ tiếp tục.
12345678910 | Sub Msgbox_BeforeRunning ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bạn có muốn tiếp tục không?", vbQuestion + vbYesNo)If answer = vbNo Then Exit Sub'Một số mãKết thúc Sub |
Hộp thông báo VBA trong Access VBA
Tất cả các ví dụ trên đều hoạt động hoàn toàn giống nhau trong Access VBA cũng như trong Excel VBA.