在 MsExcel 中,防止在填写所有字段之前输入新记录

Preventing entering new records before all the fields filled, in MsExcel

我在 Excel 有一个作品sheet:

我的目标 - 在我的下拉列表中填写所有字段之前,用户不应该能够继续。

否则 - 在所有字段都输入数据之前,应该出现某种警报,或者只是不让他们继续处理下一条记录。

另一个重要细节 - 我的表单在所有字段中都包含下拉列表 这就是为什么仅简单的数据验证规则不起作用的原因。 (已经有其他规则和公式)

是否仍然可以执行 vba 中描述的操作? 我有 excel 2017

谢谢!

地狱更新--1931 我可能做错了什么 我将您的代码放置如下:

     Private Sub Worksheet_Deactivate()
     Dim sh As Worksheet, lastRow As Long, lastCol As Long, 
                                  emptyCells As Range

      Set sh = Worksheets("ClientSatisfactionForm") ' very important to fully 
                                             qualify it (not ActiveSheet)!
      lastRow = sh.Range("A" & Rows.Count).End(xlUp).Row
      lastCol = sh.Cells(1, Columns.Count).End(xlToLeft).Column
     On Error Resume Next
     Set emptyCells = sh.Range(sh.Cells(1, 1), sh.Cells(lastRow, 
                        lastCol)).SpecialCells(xlCellTypeBlanks)
     If Err.Number = 1004 Then
     Err.Clear: On Error GoTo 0: Exit Sub
     End If
   On Error GoTo 0
   If emptyCells.Cells.Count > 0 Then
      MsgBox "There are empty cells, which must be filled: " & 
                                        emptyCells.Address(0, 0)
     sh.Activate: emptyCells.Select
     Exit Sub
   End If
  End Sub

现在,它不会显示任何错误消息(就像在以前的版本中一样 - 当我在关闭事件中执行时),即使我输入空行它现在也只是询问是否保存 sheet... .

PS - 每当我将事件更改为“关闭前”时,此代码与前一个代码一样有效。但仍然让退出 Worksheet 保存空单元格 ..

请尝试下一个代码:

编辑后:现在sh不能ActiveSheet了!它必须明确限定。含义使用涉及的工作sheet名称

Sub checkEmptyCells()
  Dim sh As Worksheet, lastRow As Long, lastCol As Long, emptyCells As Range
  
  Set sh = Worksheets("Involved sheet name") ' very important to fully qualify it (not ActiveSheet)!
  lastRow = sh.Range("A" & Rows.count).End(xlUp).Row
  lastCol = sh.cells(1, Columns.count).End(xlToLeft).Column
  On Error Resume Next
   Set emptyCells = sh.Range(sh.cells(1, 1), sh.cells(lastRow, lastCol)).SpecialCells(xlCellTypeBlanks)
   If Err.Number = 1004 Then
        Err.Clear: On Error GoTo 0: Exit Sub
   End If
   On Error GoTo 0
  If emptyCells.cells.count > 0 Then
    MsgBox "There are empty cells, which must be filled: " & emptyCells.Address(0, 0)
    sh.Activate: emptyCells.Select
    Exit Sub
  End If
End Sub

以上代码假设没有单元格具有 returns "" 的公式。在这种情况下 xlCellTypeBlanks 不认为它们是空的...

已编辑:

为了在讨论中不允许离开sheet,直到所有单元格都被填满,上面的Sub(无论如何命名)应该在[=16中简单调用=]事件,如下:

Private Sub Worksheet_Deactivate()
   checkEmptyCells
End Sub