用户清除内容时的VBA错误处理

时间:2017-05-01 15:40:44

标签: excel-vba vba excel

我正在使用以下代码片段,如果输入美元值或输入百分比值,则计算等效百分比,并计算等值美元值。这工作正常,但如果用户同时选择%和$值并清除内容(而不是仅将值更新为0),则会导致运行时错误,这将基于代码完全有意义。我想要确定的是处理此类错误的最佳方法。如果选择了$和%值,并且单击了清除内容,它会在不破坏代码的情况下更正为0,那么是否有任何创造性的想法?

If Not Application.Intersect(cell, target) Is Nothing Then
Select Case target.Column
    Case 37, 39, 43
        target.Offset(, 1).Value = target.Value / Range("V" & target.Row).Value
    Case 38, 40, 44
        target.Offset(, -1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2)
    Case 41, 60
        target.Offset(, 1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2)
    Case 42, 61
        target.Offset(, -1).Value = target.Value / Range("V" & target.Row).Value
End Select
End If

1 个答案:

答案 0 :(得分:1)

使用On Error Resume Next然后检查错误,如果找到则将值设置为0

On Error Resume Next 'jsut keep going if we have an error
If Not Application.Intersect(cell, target) Is Nothing Then
    Select Case target.Column
        Case 37, 39, 43
            target.Offset(, 1).Value = target.Value / Range("V" & target.Row).Value
        Case 38, 40, 44
            target.Offset(, -1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2)
        Case 41, 60
            target.Offset(, 1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2)
        Case 42, 61
            target.Offset(, -1).Value = target.Value / Range("V" & target.Row).Value
    End Select
End If
If Err.Number <> 0 Then 'check for an error
    Err.Clear 'clear the error
    target.Offset(, -1).Value = 0 'set the value to 0
End If