Clever-Excel-Forum

Normale Version: Bug13/bei Makro
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Sorry!
Ich sehe gerade, dass *ohneName* Renato heißt.

Mea culpa,
Ralf
hab den fehler gefunden...auf meinem Laptop habe ich die Grundeinstellung, dass auch ein Komma für die Berechnung gemacht werden kann. im Geschäft ist diese Einstellung nicht so.
Da mit dem Code gewisse Felder bereits vorerfasst werden, wird der Fehler ausgelöst, da es die Einstellung des Excel nicht zulässt.
Hallo

das Excel in einen Fehler hineinlaeuft kann man nicht immer verhindern, es gibt aber verschiedene Möglichkeiten Fehlermeldungen abzufangen und zu bearbeiten. Mit den Befehlen:  "On Error Resume Next"  oder  "On Error GoTo Fehler" 

Das kann ein komplettes ignorieren des Fehlers sein, -ohne Fehlermeldung-.  Oder eine MsgBox Fehlermeldung.  Oder den Fehler über eine InputBox abfangen zur manuellen Korrektur.  Anbei drei Beispiele als Demo.

mfg  Gast 123

Code:
Sub txt3Säule_Change()
With Worksheets("Tool")
On Error Resume Next
'** ignoriert Fehler, -keine Fehlermeldung- !!
txt3Säule = "asd"  'extra Fehler Zahl als Text !!
.Range("B73") = CDbl(txt3Säule)
End With
End Sub


Sub txt3Säule_Change_2()
With Worksheets("Tool")
On Error Resume Next
txt3Säule = "asd"  'extra Fehler Zahl als Text !!
.Range("B73") = CDbl(txt3Säule)
'** Sprung zur Fehlerzelle und/oder MsgBox Fehlermeldung
'If Err > 0 Then .Range("B73").Select  'Zelle anspringen
If Err > 0 Then MsgBox txt3Säule & "  Fehler b73"
End With
End Sub


Sub txt3Säule_Change_3()
Dim Eingabe As Double
With Worksheets("Tool")
On Error GoTo Fehler
txt3Säule = "asd"  'extra Fehler Zahl als Text !!
.Range("B73") = CDbl(txt3Säule)
Exit Sub
'** Fehlerbearbeitung über InputBox
Fehler:  'Code bei Fehler mit InputBox
Eingabe = InputBox("Eingabe B73", , txt3Säule)
If Eingabe = Empty Then Exit Sub
.Range("B73") = CDbl(Eingabe)
End With
End Sub
Moin Gast!
Hast Du mein #5 gelesen?
  1. Das Change-Ereignis macht hier keinen Sinn
  2. Die einzig sinnvolle Variante, den Fehler auszuschließen, ist
Code:
If IsNumeric(TextBox) Then CDbl(Textbox) Else MsgBox
Natürlich funktioniert auch On Error
Allerdings reagiert dies bei jedem Fehler!
Also auch, wenn ich bspw. in eine geschützte Tabelle schreiben will.
Daher sollte Code immer so geschrieben werden, dass erwartete Fehler ausgeschlossen werden.

(Mal ganz davon abgesehen, dass die Ursache beim TE ja ganz woanders zu finden war [englisches Excel mit anderem Dezimaltrennzeichen])


Two Cents
Ralf
Hallo Ralf

nehme deine Antwort zur Kenntnis.

mfg Gast 123
Hallo Ralf

Anscheinend hat sich das Excel über nacht entschiede, dass es heute auch mit dieser Excel Einstellung nicht mehr funktioniert. Gestern funktionierte es einwandfrei.
Kannst du mir kurz erklären, wo ich diesen Code in meinem Script einfügen muss...ist das bei jedem abschnitt...oder kann man dies generell für alle Felder einfügen?

Code:
If IsNumeric(TextBox) Then CDbl(Textbox) Else MsgBox
Danke
Hallo Renato,

(31.05.2017, 09:23)Reniiii schrieb: [ -> ]Anscheinend hat sich das Excel über nacht entschiede, dass es heute auch mit dieser Excel Einstellung nicht mehr funktioniert

Das lassen wir mal so im Raum stehen ;)

(31.05.2017, 09:23)Reniiii schrieb: [ -> ]Kannst du mir kurz erklären, wo ich diesen Code in meinem Script einfügen muss

Wie Ralf bereits sagte, gibt es verschiedene Möglichkeiten und "Zeitpunkte" diese Prüfung durchuzführen. z.B. beim Klick auf deinen Button (z.B. OK o.Ä.) so auch in meinem Beispiel.

Code:
Private Sub btnOK_Click()
   If IsNumeric(Me.txtVerzinsungPK) Then
       Worksheets("Tool").Range("B38") = CDbl(Me.txtVerzinsungPK)
   Else
       MsgBox "Bitte einen numerischen Wert für Verzinsung angeben", vbOKOnly + vbExclamation, "Fehleingabe"
       Me.txtVerzinsungPK.Value = ""
   End If
End Sub

Hier sind allerdings auch keine weiteren Fehler in der Überprüfung, da ich deine Datei nicht kenne.

(31.05.2017, 09:23)Reniiii schrieb: [ -> ]...ist das bei jedem abschnitt...oder kann man dies generell für alle Felder einfügen?

Hierfür gibt es 2 vernünftige Ansätze, die erste, Klassenprogrammierung, dürfte deine Fähigkeiten überschreiten.
Die zweite Möglichkeit, ist die Textboxen in einer Schleife zu durchlaufen und zu prüfen.
Seiten: 1 2