2017-05-01 3 views
0

Ich verwende das folgende Code-Schnipsel, das den Prozentwert berechnet, wenn ein Dollarwert eingegeben wird, oder wenn ein Prozentwert eingegeben wird, wird der entsprechende Dollarwert berechnet. Das funktioniert gut, aber wenn der Benutzer sowohl den% und $ Wert auswählt als auch den Inhalt löscht (anstatt nur den Wert auf 0 zu setzen), verursacht das einen Laufzeitfehler, was auf der Basis des Codes Sinn ergibt. Was ich versuche zu ermitteln, ist der beste Weg, um diese Art von Fehler zu behandeln. Irgendwelche kreativen Gedanken darüber, ob sowohl der $ als auch der% -Wert ausgewählt sind und der Inhalt klar ist, dass er auf 0 korrigiert wird, ohne den Code zu brechen?VBA-Fehlerbehandlung, wenn Benutzer Inhalt löscht

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 

Antwort

1

Verwenden On Error Resume Next und dann auf einen Fehler überprüfen und, wenn gesetzt

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 
den Wert auf 0 gefunden
Verwandte Themen