excel vba - msgbox abort / retry / ignore

时间:2015-05-19 03:56:14

标签: excel vba excel-vba

我在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它正在删除下一个单元格,但我的意思是清除包含无效数据的单元格。

1 个答案:

答案 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

如果用户选择了消息中的中止按钮,此代码将清除刚刚更改的单元格并将选择更改回该单元格。