Yêu cầu đầu vào (Microsoft Excel)
Khi bạn đang phát triển một trang tính sẽ được người khác sử dụng, bạn có thể muốn đảm bảo rằng họ điền vào các ô nhất định trước khi họ được phép đóng sổ làm việc. Không có hàm tích hợp sẵn trong Excel để thực hiện việc này, nhưng bạn có thể tạo một macro sẽ thực hiện kiểm tra cần thiết và ngăn người dùng tiếp tục. Đây có thể là một macro khá đơn giản, gắn liền với sự kiện BeforeClose.
BeforeClose thậm chí được kích hoạt bất cứ khi nào sổ làm việc được đóng bằng bất kỳ cách nào. Bí quyết là cài đặt thuộc tính Hủy trong trình xử lý sự kiện. Đặt Cancel thành True sẽ dừng việc đóng sổ làm việc và không thay đổi kết quả là sổ làm việc sẽ đóng bình thường.
Ví dụ: macro sau đây kiểm tra xem ô A1 có bất kỳ thứ gì trong đó không; nếu có, thì sổ làm việc sẽ bị đóng. Nếu không, thì người dùng được thông báo rằng thiếu thứ gì đó và việc đóng sẽ bị hủy.
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Cells(1, 1).Value = "" Then MsgBox "Please fill cell A1" Cancel = True End If End Sub
Các macro phức tạp hơn có thể được tạo, nếu muốn. Ví dụ: bạn có thể có một số ô khác nhau cần được kiểm tra. Phiên bản sau kiểm tra một dải ô có tên là “Bắt buộc” để xem liệu mỗi ô trong dải ô có chứa thứ gì không. Nếu bất kỳ ô nào trống, thì không thể lưu hoặc đóng sổ làm việc. (Macro này không chỉ được kích hoạt trong sự kiện BeforeClose mà còn trong sự kiện BeforeSave.) Hai trình xử lý sự kiện được đưa vào mã cho sổ làm việc và macro ForceDataEntry được đặt trong mô-đun macro thông thường.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Sub ForceDataEntry() As Boolean Dim rng As Range Dim c As Variant Dim rngCount As Integer Dim CellCount As Integer Set rng = Range("Mandatory") rngCount = rng.Count CellCount = 0 For Each c In rng If Len(c) > 0 Then CellCount = CellCount + 1 End If Next c ForceDataEntry = False If CellCount <> rngCount Then ForceDataEntry = True End If End Sub
Bạn cần lưu ý rằng bất kỳ triển khai nào yêu cầu macro (như cách này) đều gặp phải một vấn đề tiềm ẩn — người dùng có thể quyết định không bật macro khi sổ làm việc được tải. Nếu họ chạy sổ làm việc với macro bị vô hiệu hóa, thì họ vẫn có thể lưu sổ làm việc mà không có tất cả các ô bắt buộc chứa giá trị.
_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 trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (9572) áp dụng cho Microsoft Excel 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 Excel (Excel 2007 trở lên) tại đây: