Các bài viết trước bạn đọc đã cùng Bảo Tiến Giang tìm hiểu về hàm TRIM và hàm DIR trong VBA, bài viết dưới đây Bảo Tiến Giang sẽ giới thiệu tiếp cho bạn về hàm MsgBox trong VBA.
Trong VBA, chúng ta có thể dùng hàm MsgBox để hiển thị hộp thông báo như hình dưới đây:
Hàm MsgBox chỉ được dùng để hiển thị hộp thoại thông báo cho user với các thông báo chỉnh sửa tùy ý hoặc lấy một số thông báo đầu vào cơ bản (chẳng hạn như Yes /No / OK / Cancel).
Khi hộp thoại MsgBox được hiển thị, mã VBA sẽ bị tạm dừng. Chúng ta sẽ phải click vào nút bất kỳ trong MsgBox để chạy mã VBA còn lại.
Tham khảo tiếp bài viết dưới đây của Bảo Tiến Giang để tìm hiểu về hàm MsgBox trong VBA, công thức và cách dùng hàm nhé.
Cấu tạo hộp thông báo MsgBox trong VBA.
Một hộp thông báo bao gồm các phần dưới đây:
1. Tiêu đề (title): được sử để hiển thị nội dung thông báo trong hộp thông báo. Nếu không chỉ định bất kỳ thứ gì, trong trường hợp này nó sẽ hiển thị tên ứng dụng là Excel.
2. Lời nhắc (prompt): đây là thông báo mà chúng ta muốn hiển thị. Chúng ta có thể dùng để thêm một vài dòng hoặc thậm chí là hiển thị bảng / dữ liệu ở đây.
3. Nút (button): nút OK là mặc định, tuy nhiên nếu muốn chúng ta có thể chỉnh sửa tùy ý để heienr thị các nút khác như Yes / No, Yes / No / Cancel, Retry / Ignore, ….
4. Biểu tượng đóng: để đóng hộp thông báo, chúng ta click chọn biểu tượng đóng là xong.
Cú pháp hàm MsgBox trong VBA.
Hàm MsgBox có cú pháp tương tự các hàm VBA khác:
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
Trong đó:
– Promt (lời nhắc): là đối số bắt buộc. Nó hiển thị thông báo mà chúng ta nhìn thấy trong MsgBox. Trong ví dụ ở trên, prompt là “This is a sample MsgBox”. Lời nhắc giới hạn tối đa 1024 ký tự, và có thể dùng để hiển thị giá trị của các biến. Trong trường hợp nếu muốn hiển thị lời nhắc bao gồm nhiều dòng, chúng ta cũng có thể làm được điều này.
– [buttons] (nút): xác định các nút và biểu tượng nào được hiển thị trong MsgBox. Cho ví dụ, nếu dùng vbOkOnly nó sẽ hiển thị nút OK, nếu dùng nút vbOKCancel nó sẽ hiển thị cả 2 nút là OK và Cancel.
– Hàm MsgBox trong VBA (tiêu đề): tại đây chúng ta có thể chỉ định nào để hiển thị trong hộp thoại thông báo, nó sẽ được hiển thị trên thanh tiêu đề của MsgBox. Nếu không chỉ định bất cứ thứ gì, nó sẽ hiển thị tên ứng dụng.
– [helpfile]: chúng ta có thể chỉ định file trợ giúp có thể truy cập được khi user click chọn nút Help. Nút Help chỉ xuất hiện khi chúng ta dùng mã nút. Nếu dùng file Help, chúng ta cũng phải chỉ định đối số context.
– [context]: là biểu thức số hay Help context number được gán cho chủ đề Help phù hợp.
Lưu ý: Tất cả các đối số trong ngoặc vuông đều là tùy chọn (Option). Chỉ có đối số “prompt” là bắt buộc.
Các hằng của nút (Button) MsgBox trong VBA.
Trong phần tiếp theo dưới đây Bảo Tiến Giang sẽ giới thiệu cho bạn các loại nút khác nhau có thể dùng trong MsgBox VBA.
Dưới đây là bảng danh sách các hằng nút có thể dùng trong MsgBox VBA:
Lưu ý: Khi chọn nút OK, mã sẽ tiếp tục chạy, còn nếu click chọn Cancel, mã sẽ dừng lại.
Nút vbOKOnly (mặc định)
Nếu chỉ dùng lời nhắc và không chỉ định bất kỳ đối số nào, hộp thoại thông báo mặc định sẽ có dạng như dưới đây:
Dưới đây là đoạn mã hiển thị hộp thoại thông báo này:
Sub DefaultMsgBox()
MsgBox “This is a sample box”
End Sub
Lưu ý chuỗi văn bản phải được đặt trong dấu ngoặc kép.
Ngoài ra chúng ta cũng có thể dùng hằng của nút vbOKOnly cho dù không chỉ định bất kỳ đối số nào, nó được coi là mặc định.
Nút OK & Cancel
Nếu chỉ muốn hiển thị nút OK và nút Cancel, chúng ta dùng hằng vbOKCancel.
Sub MsgBoxOKCancel()
MsgBox “Want to Continue?”, vbOKCancel
End Sub
Nút Abort, Retry và Ignore
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 “What do you want to do?”, vbAbortRetryIgnore
End Sub
Nút Yes và No
dùng hằng vbYesNo để hiển thị các nút Yes và No.
Sub MsgBoxYesNo()
MsgBox “Should we stop?”, vbYesNo
End Sub
Nút Retry và Cancel
Chúng ta dùng hằng vbRetryCancel để hiển thị các nút Retry và Cancel.
Sub MsgBoxRetryCancel()
MsgBox “What do you want to do next?”, vbRetryCancel
End Sub
Nút Help
dùng hằng vbMsgBoxHelpButton để hiển thị nút Help. Ngoài ra chúng ta có thể dùng nó với các hằng của các nút khác.
Sub MsgBoxRetryHelp()
MsgBox “What do you want to do next?”, vbRetryCancel + vbMsgBoxHelpButton
End Sub
Lưu ý: trong đoạn mã trên 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.
xây dựng nút mặc định
Chúng ta có thể dùng hằng vbDefaultButton1 để thiết lậpnú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 đó chúng ta nhấn Enter để thực thi nút đó.
Dưới đây là đoạn mã để xây dựng nút thứ 2 (nút No) làm nút mặc định:
Sub MsgBoxOKCancel()
MsgBox “What do you want to do next?”, vbYesNoCancel + vbDefaultButton2
End Sub
Trong hầu hết các trường hợp, nút ngoài cùng bên trái là nút mặc định. Ngoài ra chúng ta có thể chọn các nút khác để lmaf nút mặc định bằng cách dùng vbDefaultButton2, vbDefaultButton3 và vbDefaultButton4.
Các hằng của biểu tượng (icon) của MsgBox trong VBA
Ngoài các nút, chúng ta cũng có thể chỉnh sửa tùy ý 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 liệt kê mã hiển thị các biểu tượng tương ứng:
Biểu tượng thông báo quan trọng
Nếu muốn 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 dùng hằng vbCritical. Ngoài ra chúng ta 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ã.
Cho ví dụ, đoạn mã dưới đây sẽ hiển thị nút OK mặc định với biểu tượng thông báo quan trọng:
Sub MsgBoxCriticalIcon()
MsgBox “This is a sample box”, vbCritical
End Sub
Nếu muốn hiển thị biểu tượng thông báo quan trọng cùng các nút Yes và No, bạn dùng đoạn mã dưới đây:
Sub MsgBoxCriticalIcon()
MsgBox “This is a sample box”, 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 dùng hằng vbQuestion:
Sub MsgBoxQuestionIcon()
MsgBox “This is a sample box”, 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 dùng hằng vbExclamation.
Sub MsgBoxExclamationIcon()
MsgBox “This is a sample box”, 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 dùng hằng vbInformation:
Sub MsgBoxInformationIcon()
MsgBox “This is a sample box”, vbYesNo + vbInformation
End Sub
chỉnh sửa tùy ý tiêu đề và lời nhắc trong hộp thoại thông báo MsgBox
Bằng cách dùng MsgBox, chúng ta có thể chỉnh sửa tùy ý tiêu đề (title) và lời nhắc (prompt) trong hộp thoại thông báo.
Trong trường hợp nếu không chỉ định đối số tiêu đề, MsgBox sẽ tự động dùng tiêu đề của ứng dụng (trong trường hợp này là Excel).
Để chỉ định tiêu đề mà bạn chỉ định, dùng đoạn mã dưới đây:
Sub MsgBoxInformationIcon()
MsgBox “Do you want to continue?”, vbYesNo + vbQuestion, “Step 1 of 3”
End Sub
Tương tự, chúng ta cũng có thể chỉnh sửa tùy ý 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 Bảo Tiến Giang đã thêm một ngắt dòng bằng cách dùng vbNewLine:
Sub MsgBoxInformationIcon()
MsgBox “Do you want to continue?” & vbNewLine & “Click Yes to Continue”, vbYesNo + vbQuestion, “Step 1 of 3”
End Sub
Ngoài ra nếu muốn chúng ta cũng có thể dùng ký tự trả về – Chr(13) – hoặc – Chr(10) để chèn 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 chứ 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 nếu click vào nút bất kỳ nhưng không hoạt động.
Với hàm MsgBox trong Excel, chúng ta có thể quyết định khi user click vào một nút cụ thể bất kỳ nó sẽ làm những gì. Đơn giản là bởi vì mỗi một nút có một giá trị liên quan.
Nếu click vào nút Yes, hàm MsgBox sẽ trả về giá trị (6 hoặc hằng vbYes) mà chúng ta có thể dùng trong mã của mình. Tương tự khi click chọn No, nó sẽ trả về giá trị khác (7 hoặc vbNo) mà chúng ta có thể 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 Bảo Tiến Giang sẽ giới thiệu cho bạn cách kiểm soát mã macro VBA dựa trên nút mà user click vào.
Trong đoạn mã dưới đây, nếu user click chọn Yes, nó sẽ hiển thị thông báo “bạn đã click chọn Yes”, còn nếu click chọn No, nó sẽ hiển thị thông báo “bạn đã click chọn No”.
Sub MsgBoxInformationIcon()
Result = MsgBox(“Do you want to continue?”, vbYesNo + vbQuestion)
If Result = vbYes Then
MsgBox “You clicked Yes”
Else: MsgBox “You clicked No”
End If
End Sub
Trong đoạn mã trên, Bảo Tiến Giang gán giá trị của hàm MsgBox cho biến Result. Khi click chọn nút Yes, biến Result sẽ lấy hằng vbYes (hoặc số 6), khi click chọn No, biến Result lấy hằng vbNo (hoặc số 7).
Sau đó dùng cấu trúc If Then Else để kiểm tra xem biến Result có giữ giá trị vbYes hay không. Nếu có, nó sẽ hiển thị thông báo “bạn đã click chọn Yes”, nếu không thì hiển thị thông báo “bạn đã click chọn No”.
Chúng ta có thể dùng cùng một khái niệm để chạy mã nếu user click chọn Yes, và thoát sub khi click chọn No.
Lưu ý: Khi gán đầu ra MsgBox cho một biến, chúng ta phải đặt các đối số của hàm MsgBox trong dấu ngoặc đơn.
Cho ví dụ, trong dòng Result = MsgBox(“Do you want to continue?”, vbYesNo + vbQuestion), chúng ta có thể thấy các đối số nằm trong ngoặc đơn.
Bài viết trên đây Bảo Tiến Giang vừa giới thiệu cho bạn về hàm MsgBox trong VBA. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Bảo Tiến Giang để tìm hiểu thêm về hàm DIR trong VBA. Nếu có thắc mắc hoặc câu hỏi nào cần giải đáp, bạn đọc có thể để lại trong phần bình luận bên dưới bài viết nhé.
Trong VBA, chúng ta có thể dùng hàm MsgBox để hiển thị hộp thông báo như hình dưới đây: