我在Excel工作表中验证输入。当用户输入无效数据时,会显示MsgBox
,提供中止/重试/忽略选项。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If IsNumeric(Range("i17")) Then
If [I17] < 0 Then
result = MsgBox("Critical Error Encountered", vbAbortRetryIgnore + vbCritical, "Error Encountered")
If result = 3 Then
ActiveCell.Value = Empty
End If
End If
End If
End sub
由于我在SelectionChange
中编写此代码时单击回车然后只显示消息框,因为我正在写Active.Cell = Empty
它正在删除下一个单元格,但我的意思是清除包含无效数据的单元格。
答案 0 :(得分:0)
如果您使用SelectionChange
事件,则Target
范围是刚刚选择的单元格,而不是刚刚更改过的单元格。如果您使用工作表的Change
事件,则Target
指的是已更改的单元格。因此,假设单元格I17是某种小计/验证单元格而不是用户输入数据的单元格,请尝试以下操作:
Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric(Range("i17")) Then
If [I17] < 0 Then
result = MsgBox("Critical Error Encountered", vbAbortRetryIgnore + vbCritical, "Error Encountered")
If result = 3 Then
Target.Value = Empty
Target.Select
End If
End If
End If
End Sub
如果用户选择了消息中的中止按钮,此代码将清除刚刚更改的单元格并将选择更改回该单元格。