Trong VBA, Hàm MsgBox là chiếc chìa khóa mở cánh cửa hộp thoại thông báo, một cách thức tinh tế để tương tác với người dùng, như bạn thấy dưới đây:
Khám phá Hàm MsgBox là mở ra thế giới của thông điệp tùy chỉnh, làm cho giao tiếp với người dùng trở nên độc đáo và đa dạng hơn với những lựa chọn như Yes/No/OK/Cancel.
Khi hộp thoại MsgBox xuất hiện, quá trình thực thi mã VBA sẽ tạm dừng, đợi chờ người dùng tương tác bằng cách nhấn vào nút trong hộp thoại.
Hãy đọc thêm chi tiết trong bài viết dưới đây của Mytour để hiểu rõ về hàm MsgBox trong VBA, với các công thức và cách ứng dụng hàm này.
Cấu trúc hộp thoại MsgBox trong VBA.
Một chiếc hộp thoại bao gồm các thành phần sau:
1. Tiêu đề (title): Dùng để hiển thị thông điệp trong hộp thoại. Nếu không chỉ định gì cả, mặc định sẽ là tên ứng dụng, trong trường này là Excel.
2. Thông báo (prompt): Đây là nội dung thông điệp mà chúng ta muốn hiển thị. Có thể sử dụng để thêm một vài dòng hoặc hiển thị bảng / dữ liệu.
3. Nút (button): Nút OK là mặc định, nhưng có thể tùy chỉnh để hiển thị các nút khác như Yes / No, Yes / No / Cancel, Retry / Ignore, ...
4. Biểu tượng đóng: Click vào biểu tượng đóng để đóng hộp thoại.
Cú pháp hàm MsgBox trong VBA.
Hàm MsgBox sử dụng cú pháp giống những hàm khác trong VBA:
MsgBox( thông_báo [, nút ] [, tiêu_đề ] [, tập_tin_trợ_giúp, ngữ_cảnh ] )
Trong đó:
- Lời nhắc (Prompt): là đối số bắt buộc. Nó hiển thị thông báo trong MsgBox. Trong ví dụ trên, lời nhắc là 'Đây là một hộp thoại MsgBox mẫu'. Lời nhắc giới hạn tối đa 1024 ký tự và có thể sử dụng để hiển thị giá trị của các biến. Để hiển thị lời nhắc với nhiều dòng, chúng ta cũng có thể thực hiện điều này.
- [Nút] (Buttons): xác định các nút và biểu tượng hiển thị trong MsgBox. Ví dụ, sử dụng vbOkOnly sẽ hiển thị nút OK, còn vbOKCancel sẽ hiển thị cả 2 nút OK và Cancel.
- [Tiêu đề]: tại đây chúng ta có thể chỉ định tiêu đề sẽ hiển thị trên thanh tiêu đề của MsgBox. Nếu không chỉ định, sẽ hiển thị tên ứng dụng.
- [Tập tin trợ giúp]: có thể chỉ định file trợ giúp sẽ mở khi người dùng nhấp chọn nút Trợ giúp. Nút Trợ giúp chỉ xuất hiện khi sử dụng đối số Nút. Nếu sử dụng file Trợ giúp, cũng phải chỉ định đối số ngữ cảnh.
- [Ngữ cảnh]: là một số hoặc số nguyên dành cho chủ đề Trợ giúp tương ứng.
Lưu ý: Tất cả các đối số trong ngoặc vuông đều là tùy chọn. Chỉ có đối số 'lời nhắc' là bắt buộc.
Các hằng của Nút (Button) trong MsgBox của VBA.
Ở phần tiếp theo dưới đây, Mytour sẽ giới thiệu về các loại nút khác nhau mà bạn có thể sử dụng trong MsgBox của VBA.
Dưới đây là danh sách các hằng số nút có thể sử dụng trong MsgBox của VBA:
Lưu ý: Khi chọn nút OK, mã sẽ tiếp tục chạy, trong khi chọn Cancel sẽ dừng mã.
Nút vbOKOnly (mặc định)
Nếu chỉ sử dụng lời nhắc mà không chỉ định bất kỳ đối số nào khác, hộp thoại thông báo mặc định sẽ có dạng như sau:
Dưới đây là đoạn mã để hiển thị hộp thoại thông báo mặc định:
Sub DefaultMsgBox()
MsgBox 'Đây là một hộp thoại mẫu'
End Sub
Chú ý rằng chuỗi văn bản phải được đặt trong dấu ngoặc kép.
Ngoài ra, có thể sử dụng hằng của nút vbOKOnly ngay cả khi không chỉ định bất kỳ đối số nào, nó là giá trị mặc định.
Nút OK & Cancel
Nếu chỉ muốn hiển thị nút OK và nút Cancel, sử dụng hằng vbOKCancel.
Sub MsgBoxOKCancel()
MsgBox 'Bạn muốn tiếp tục không?', vbOKCancel
End Sub
Nút Abort, Retry và Ignore
Sử dụng hằng vbAbortRetryIgnore để hiển thị các nút Abort, Retry và Ignore.
Dưới đây là đoạn mã hiển thị hộp thoại thông báo này:
Sub MsgBoxAbortRetryIgnore()
MsgBox 'Bạn muốn làm gì?', vbAbortRetryIgnore
End Sub
Nút Yes và No
Sử dụng hằng vbYesNo để hiển thị các nút Yes và No.
Sub MsgBoxYesNo()
MsgBox 'Chúng ta nên dừng lại không?', vbYesNo
End Sub
Nút Retry và Cancel
Chúng ta sử dụng hằng vbRetryCancel để hiển thị các nút Retry và Cancel.
Sub MsgBoxRetryCancel()
MsgBox 'Bạn muốn làm gì tiếp theo?', vbRetryCancel
End Sub
Nút Help
Sử dụng hằng vbMsgBoxHelpButton để hiển thị nút Hỗ trợ. Ngoài ra, có thể áp dụng nó với các hằng của các nút khác.
Sub HỗTrợRetryMsgBox()
MsgBox 'Bạn muốn thực hiện thao tác gì tiếp theo?', vbRetryCancel + vbMsgBoxHelpButton
End Sub
Lưu ý: Trong đoạn mã dưới đây, chúng ta kết hợp 2 hằng của 2 nút khác nhau (vbRetryCancel và vbMsgBoxHelpButton). Phần đầu tiên hiển thị các nút Retry và Cancel, phần thứ 2 hiển thị nút Help.
Thiết đặt nút mặc định
Chúng ta có thể sử dụng hằng vbDefaultButton1 để đặt nút đầu tiên làm nút mặc định. Điều này có nghĩa là nút đã được chọn, sau đó nhấn Enter để thực thi nút đó.
Dưới đây là đoạn mã để thiết đặt nút thứ 2 (nút No) làm nút mặc định:
Sub HộpThoạiOKHủy()
MsgBox 'Bạn muốn thực hiện thao tác gì tiếp theo?', vbYesNoCancel + vbDefaultButton2
End Sub
Trong hầu hết các tình huống, nút ở phía bên trái cùng là nút mặc định. Ngoài ra, chúng ta có thể chọn các nút khác làm nút mặc định bằng cách sử dụng vbDefaultButton2, vbDefaultButton3 và vbDefaultButton4.
Các hằng của biểu tượng (icon) trong MsgBox VBA
Bên cạnh nút, chúng ta cũng có thể tùy chỉnh các biểu tượng được hiển thị trong hộp thoại thông báo MsgBox.
Dưới đây là bảng danh sách mã hiển thị cho các biểu tượng tương ứng:
Biểu tượng thông báo quan trọng
Để hiển thị biểu tượng thông báo quan trọng trong hộp thoại thông báo MsgBox, chúng ta sử dụng hằng vbCritical. Hơn nữa, có thể kết hợp hằng này với các hằng của các biểu tượng khác bằng cách thêm dấu + giữa các mã.
Ví dụ, đoạn mã dưới đây sẽ hiển thị nút OK mặc định kèm theo biểu tượng thông báo quan trọng:
Sub HộpThoạiBiểuTượngQuanTrọng()
MsgBox 'Đây là hộp thoại mẫu', vbCritical
End Sub
Nếu muốn hiển thị biểu tượng thông báo quan trọng cùng với các nút Yes và No, bạn sử dụng đoạn mã dưới đây:
Sub HộpThoạiBiểuTượngQuanTrọng()
MsgBox 'Đây là hộp thoại mẫu', vbYesNo + vbCritical
End Sub
Biểu tượng dấu hỏi chấm
Để hiển thị biểu tượng dấu hỏi chấm trong MsgBox, chúng ta sử dụng hằng vbQuestion:
Sub HộpThoạiBiểuTượngCâuHỏi()
MsgBox 'Đây là hộp thoại mẫu', vbYesNo + vbQuestion
End Sub
Biểu tượng cảnh báo
Nếu muốn hiển thị biểu tượng dấu chấm than (biểu tượng cảnh báo) trong MsgBox, chúng ta sử dụng hằng vbExclamation.
Sub HộpThoạiBiểuTượngCảnhBáo()
MsgBox 'Đây là hộp thoại mẫu', vbYesNo + vbExclamation
End Sub
Biểu tượng thông tin
Để hiển thị biểu tượng thông tin trong MsgBox, chúng ta sử dụng hằng vbInformation:
Sub HộpThoạiBiểuTượngThôngTin()
MsgBox 'Đây là hộp thoại mẫu', vbYesNo + vbInformation
End Sub
Tùy chỉnh tiêu đề và lời nhắc trong hộp thoại thông báo MsgBox
Bằng cách sử dụng MsgBox, chúng ta có thể tùy chỉnh tiêu đề (title) và lời nhắc (prompt) trong hộp thoại thông báo.
Nếu không chỉ định tiêu đề, MsgBox sẽ tự động sử dụng tiêu đề của ứng dụng (trong trường hợp này là Excel).
Để chỉ định tiêu đề theo ý muốn, sử dụng đoạn mã dưới đây:
Sub HộpThoạiBiểuTượngThôngTin()
MsgBox 'Bạn có muốn tiếp tục không?', vbYesNo + vbQuestion, 'Bước 1 trong số 3'
End Sub
Tương tự, chúng ta cũng có thể tùy chỉnh các lời nhắc trong thông báo, và có thể thêm ngắt dòng.
Trong đoạn mã dưới đây, Mytour đã thêm một ngắt dòng bằng cách sử dụng vbNewLine:
Sub HộpThoạiBiểuTượngThôngTin()
MsgBox 'Bạn có muốn tiếp tục không?' & vbNewLine & 'Nhấp Yes để Tiếp tục', vbYesNo + vbQuestion, 'Bước 1 trong số 3'
End Sub
Ngoài ra, nếu muốn, chúng ta cũng có thể sử dụng ký tự trả về - Chr(13) - hoặc - Chr(10) để thêm một dòng mới vào lời nhắc trong thông báo.
Lưu ý: Chúng ta chỉ có thể thêm một dòng mới vào lời nhắc, không thể thêm vào tiêu đề của thông báo.
Gán giá trị MsgBox cho một biến
Trong trường hợp người dùng click vào nút nhưng không có tác dụng.
Với hàm MsgBox trong Excel, chúng ta có khả năng xác định hành động khi người dùng click vào một nút cụ thể, vì mỗi nút tương ứng với một giá trị cụ thể.
Nếu chọn Yes, hàm MsgBox sẽ trả về giá trị (6 hoặc hằng vbYes) mà chúng ta có thể sử dụng trong mã. Tương tự, khi chọn No, nó sẽ trả về giá trị khác (7 hoặc vbNo) mà chúng ta có thể sử dụng trong mã.
Dưới đây là bảng danh sách các giá trị chính xác và hằng được trả về bởi hàm MsgBox:
Tiếp theo, Mytour sẽ hướng dẫn cách điều khiển mã macro VBA dựa trên nút mà người dùng chọn.
Trong đoạn mã dưới đây, nếu người dùng chọn Yes, sẽ hiển thị thông báo 'Bạn đã chọn Yes'; nếu chọn No, sẽ hiển thị thông báo 'Bạn đã chọn No'.
Sub HộpThoạiBiểuTượngThôngTin()
KếtQuả = MsgBox('Bạn có muốn tiếp tục không?', vbYesNo + vbQuestion)
If KếtQuả = vbYes Then
MsgBox 'Bạn đã chọn Yes'
Else: MsgBox 'Bạn đã chọn No'
End If
End Sub
Trong đoạn mã trên, Mytour gán giá trị của hàm MsgBox cho biến KếtQuả. Khi chọn Yes, biến KếtQuả sẽ nhận hằng vbYes (hoặc số 6), khi chọn No, biến KếtQuả nhận hằng vbNo (hoặc số 7).
Sau đó, sử dụng cấu trúc If Then Else để kiểm tra xem biến KếtQuả có giữ giá trị vbYes hay không. Nếu có, sẽ hiển thị thông báo 'Bạn đã chọn Yes'; nếu không, hiển thị thông báo 'Bạn đã chọn No'.
Chúng ta có thể áp dụng khái niệm tương tự để thực hiện mã khi chọn Yes và thoát sub khi chọn No.
Lưu ý: Khi gán kết quả MsgBox vào biến, cần đặt các đối số của hàm MsgBox trong dấu ngoặc đơn.
Ví dụ, trong dòng Result = MsgBox('Bạn có muốn tiếp tục không?', vbYesNo + vbQuestion), chúng ta thấy các tham chơi xổ sốu nằm trong dấu ngoặc đơn.
Bài viết trên đã giới thiệu về hàm MsgBox trong VBA. Ngoài ra, bạn có thể tham khảo thêm một số bài viết khác trên Mytour để hiểu rõ hơn về hàm DIR trong VBA. Nếu có thắc mắc hoặc câu hỏi, đừng ngần ngại để lại trong phần bình luận bên dưới bài viết.