用户在VBA中保存时如何抛出错误

在我的专栏A中,我有一个让用户select“是”或“否”的select。 这两个select都有一个必需的单元格。

Example: If User selects "YES" Mandatory cells will be in Colum A, D and E If User selects "No" Mandatory cells will be in Colum B, C and G 

比方说在第1行,用户select“是”并在A1和E1上input了一个值,但他忘记了在单元格D1中增加值。 在第2行中,用户select“否”并在B2和C2上input一个值,并忘记在单元格G2上input一个值。

当他点击保存时,我想抛出一个错误,说“ input以下单元格的值D1,G2

我有这个代码如下:

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim Target As Range If Not Intersect(Target, Range("A:A")) Is Nothing Then If Target = "YES" Then For i = 1 To 15 If Target.Offset(0, i).Value = "" Then MsgBox "Enter values on the mandatory cells (green)", vbCritical, "" End If Next i Cancel = True ElseIf Target = "NO" Then For i = 16 To 30 If Target.Offset(0, i).Value = "" Then MsgBox "Enter values on the mandatory cells (green)", vbCritical, "" End If Next i Cancel = True End If End If End Sub 

使用beforeSave事件的工作簿并相应地处理:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel as Boolean) 'your code here End Sub 

编辑OP的新代码:

你从来没有定义什么目标是在你的代码,所以相交方法将永远不会返回(如果它甚至工作)。 我认为你把Worksheet_change方法(包括一个“目标”范围)和Save保存混淆。 您必须在BeforeSave方法运行时定义目标是什么。 我build议在特定的值范围内运行循环,并检查是否满足所有需要的条件。 如果有些不符合要求,则可以显示一条消息给用户,指向他们丢失的数据并防止保存。

试试这两行中的一行。 抛出这样的错误不是一个好主意,但如果你想这么多…这是一个消息框:

 msgbox "Enter a value of the following cells. D1 G2" 

这是一个错误:

 err.Raise 1, description:= "Enter a value of the following cells. D1 G2"