谢谢你们。如果我尝试保存一个或多个指定单元格留空的工作表,我使用以下代码来获取弹出的错误消息。但是,当我返回并填充所有指定的空白单元格,然后保存时,我仍然收到错误消息。我哪里错了?
Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Cell As Range
Dim flag As Boolean
flag = False
If Cells(1, 1) = "" Then flag = True
For Each Cell In Range("C9:C14")
If Cell = "" Then
flag = True
Exit For
End If
Next Cell
For Each Cell In Range("C18:C25")
If Cell = "" Then
flag = True
Exit For
End If
Next Cell
For Each Cell In Range("C30:E35")
If Cell = "" Then
flag = True
Exit For
End If
Next Cell
Cancel = flag
If flag Then MsgBox "error message"
End Sub
答案 0 :(得分:0)
以下是2个小函数,用于检查"范围"包含任何空单元格,如果是"一个范围的总和"等于"另一个范围"的总和。我说这有点抽象,因为你明天的范围可能会更大或者位置不同,你可能不想重新编写你的应用时间&试。
Function IsFilled(TestRange As Range) As Boolean
Dim C As Range
IsFilled = True
For Each C In TestRange.Cells
If C = "" Then
IsFilled = False
Exit For
End If
Next C
End Function
Function IsSum(TestRange As Range, TestSum As Range) As Boolean
IsSum = (Application.WorksheetFunction.Sum(TestRange) = Application.WorksheetFunction.Sum(TestSum))
End Function
在您的上下文中,两个函数必须求值为True
才能使用户输入有效。
现在你可以
=isfilled(A2:A7)
,=issum(A3:A7;A2)
)并告诉用户他们必须努力制作True
Sub()
中评估上述两个结果,例如在Worksheet_Deactivate()
,Workbook_BeforeSave()
中(我更喜欢BeforeSave over BeforeClose,因为用户可能想要逃避而不保存,在这种情况下我不需要验证)Sub()
必须终止其默认操作,并在验证失败时显示MsgBox()
。