Riley có một trang tính mà anh ấy cần phải làm vào mỗi thứ Sáu. Trang tính này dựa trên một mẫu và có ít nhất năm ô mà anh ấy cần điền vào, trong phạm vi C4: C8. Khi anh ta bắt đầu với trang tính, các ô này trống. Riley tự hỏi liệu có cách nào để ngăn trang tính được lưu và / hoặc đóng cho đến khi anh ấy điền vào tất cả năm ô này hay không.

Có một cách để làm điều này, nhưng nó liên quan đến việc sử dụng macro. Excel hỗ trợ khái niệm trình xử lý sự kiện, có nghĩa là bạn có thể phát triển các macro tự động chạy khi một số sự kiện nhất định xảy ra. Hai sự kiện mà bạn có thể tạo trình xử lý sự kiện đặc biệt là BeforeClose (có nghĩa là trước khi sổ làm việc đóng) và BeforeSave (trước khi sổ làm việc được lưu).

Ví dụ về cách điều này có thể hoạt động, giả sử rằng trang tính chứa phạm vi cần kiểm tra (C4: C8) được đặt tên là “MyData”. Bạn có thể thêm mã này vào mô-đun ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be closed."

MsgBox sTemp         Cancel = True     End If End Sub

Lưu ý rằng macro dựa vào chức năng trang tính CountBlank để xác định xem có bất kỳ ô trống nào trong phạm vi ô hay không. Nếu nó phát hiện bất kỳ cekks trống nào (iCount lớn hơn 0), thì macro sẽ hiển thị thông báo cho người dùng và biến Cancel được đặt thành True, điều này thực sự ngăn sổ làm việc đóng.

Bạn có thể sử dụng một macro tương tự cho sự kiện BeforeSave, theo cách này:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be saved."

MsgBox sTemp         Cancel = True     End If End Sub

Nếu bạn muốn đảm bảo rằng quy trình đã chọn các ô mà đầu vào là cần thiết (ở bước cuối cùng), bạn có thể thêm dòng sau vào cả hai macro, ngay sau dòng đặt biến Cancel thành True:

rng.Select

Cũng nên nhớ rằng vì sổ làm việc của bạn dựa trên một mẫu, nó sẽ cần được lưu dưới dạng một mẫu hỗ trợ macro để hoạt động bình thường.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (4364) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.