Clever-Excel-Forum

Normale Version: Fehler abfangen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Experten für VBA.

Wenn ich auf Abbrechen klicke, kommt es zum Fehler 13, Typen unverträglich.
Das liegt wohl daran, dass VZ aufgrund des Abbruchs keinen Wert hat.
Ich weiß nicht wie ich den Fehler beim Klick auf Abbrechen umgehen kann.

Kann mir da jemand einen Denkanstoß geben?
Vielen Dank
Gruß Achim

PHP-Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As RangeCancel As Boolean)
Dim VZ As Double
Set temp 
Intersect(Range("GV"), Target)
If 
Not temp Is Nothing Then
   Cancel 
True
   
If [C3] > And [C4] > 0 Then
      VZ 
InputBox("Wert eingeben")
 
     [D13] = [C3] * VZ / ([C3] - [C4])
 
  Else
 
     Meldung MsgBox("Berechnung nicht möglich, weil C3 und C4 keine Werte enthalten")
 
  End If
End If
End Sub 
Hallo Achim,

mein Vorschlag:

Code:
   If [C3] > 0 And [C4] > 0 Then
       VZ = InputBox("Wert eingeben")
       If VZ <> "" Then
           [D13] = [C3] * VZ / ([C3] - [C4])
       Else
           Exit Sub
       End If
   Else
Gruß
Aloys
Aloys hat ja schon die Lösung präsentiert, allerdings wirst du VZ als String deklarieren müssen, denn eine Inputbox enthält nunmal Text.
Es sind außerdem noch folgende Punkte nicht gut umgesetzt:
- Wenn jemand einen Nicht-Zahlenwert eingibt, läufst du in eine Fehlermeldung. Das gehört ebenfalls abgefangen
- Du hast die Variable "Meldung" nicht deklariert. Würdest du mit Option Explicit arbeiten, wäre dir das sofort aufgefallen (wobei sich der Sinn der Variablen anhand des gezeigten Codes auch nicht erschließt)
- Bei gleicher Eingabe in C3 und C4 erhältst du ebenfalls eine Fehlermeldung, da Division durch Null. Wird das irgendwo vorab schon unterbunden?

Mein Vorschlag

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim VZ As String, Meldung As String
Set temp = Intersect(Range("GV"), Target)
If Not temp Is Nothing Then
   Cancel = True
   If [C3] > 0 And [C4] > 0 Then
       VZ = InputBox("Wert eingeben")
       If Not IsNumeric(VZ) Then
           MsgBox "Bitte Zahlenwert eingeben"
           Exit Sub
       Else
           [D13] = [C3] * VZ / ([C3] - [C4])
       End If
   Else
       Meldung = MsgBox("Berechnung nicht möglich, weil C3 und C4 keine Werte enthalten")
   End If
End If

End Sub
Moin!
Oder man nimmt gleich statt der InputBox-Funktion die Application.InputBox-Methode.
Die hat nämlich das Argument Type:=
Setzt man ihn auf 1, werden nur Zahlen akzeptiert, hier gibt es dann auch eine eingebaute Fehlermeldung.
(VZ ist bei mir As Double mit dem Kurzkennzeichen # deklariert)

Dim VZ#

VZ = Application.InputBox("Zahl eingeben:", Type:=1)
If VZ <> 0 Then Debug.Print VZ * 3.1415

Gruß Ralf
Die Application.InputBox-Methode kannte ich
noch gar nicht. Werde ich mal ausprobieren.

Vielen Dank für die Hilfe zu meinem Anliegen.
Ich wünsche allen einen erlebnisreichen
Übergang ins nächste Jahrzehnt.

Gruß Achim