Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1936to1940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler bei Nichteingabe

Fehler bei Nichteingabe
21.07.2023 09:50:51
chris58
Hallo !
Ich habe eine Bitte. Kann mir jemand sagen, was ich im Code ändern muß um keine Fehlermeldung zu erhalten.
Wenn ich die Userform aufrufe und diese befülle, jedoch bei der Textbox4 vergesse eine Zahl (und wenn es nur eine NULL ist) einzutragen, dann kommt
ein Laufzeitfehler 13 Typen unverträglich.
Was kann ich machen, die zu unterbinden oder das zumindest eine Null eingetragen wird.
Danke für Eure Hilfe
chris

Option Explicit
Private Sub CommandButton3_Click()
Dim StartZeile&
Dim Ws As Worksheet
Set Ws = ActiveSheet
StartZeile = Ws.Cells(3, 1).End(xlUp).Row + 5
TextBox1 = Int(Ws.Cells(StartZeile, 3) / 1000)
UserForm1.TextBox1.SetFocus
Ws.Cells(StartZeile + 1, 3) = TextBox3
End Sub
Private Sub CommandButton5_Click()
UserForm1.TextBox4.SetFocus
Range("C17").Value = CDbl(TextBox4.Text)
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub CommandButton4_Click()

UserForm1.TextBox4.SetFocus
Range("C17").Value = CDbl(TextBox4.Text)



Dim StartZeile&
Dim Ws As Worksheet
Set Ws = ActiveSheet
StartZeile = Ws.Cells(3, 1).End(xlUp).Row + 5


Ws.Cells(StartZeile, 3) = CDbl(Format(TextBox1, "#,##0.00"))


Ws.Cells(StartZeile + 1, 3) = TextBox3


Dim i As Long
Const NewConstSheet As String = "Berechnung"
Dim bfound As Boolean
Dim sMerk As String
Dim sMaxZeile As Long
Dim TB As Worksheet

Application.ScreenUpdating = False

'Prüfen ob Tabelle NewConstSheet schon angelegt ist
For i = 1 To ActiveWorkbook.Sheets.Count
If ActiveWorkbook.Sheets(i).Name = NewConstSheet Then
bfound = True
Exit For
End If
Next i

'wenn nicht dann anlegen
If bfound = False Then
sMerk = ActiveWorkbook.ActiveSheet.Name
ActiveWorkbook.Sheets.Add after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
ActiveWorkbook.ActiveSheet.Name = NewConstSheet
ActiveWorkbook.Sheets(sMerk).Activate
End If

Set TB = ActiveWorkbook.Sheets(NewConstSheet)

'nächste leere Zeile ermitteln
sMaxZeile = TB.Cells(TB.Rows.Count, 1).End(xlUp).Row + 1

'Daten in neue Tabelle übertragen
TB.Cells(sMaxZeile, 1) = ActiveWorkbook.ActiveSheet.Range("C7")
TB.Cells(sMaxZeile, 2) = ActiveWorkbook.ActiveSheet.Range("B7")
TB.Cells(sMaxZeile, 3) = ActiveWorkbook.ActiveSheet.Range("C6")
TB.Cells(sMaxZeile, 4) = ActiveWorkbook.ActiveSheet.Range("C12")
TB.Cells(sMaxZeile, 5) = ActiveWorkbook.ActiveSheet.Range("C13")
TB.Cells(sMaxZeile, 6) = ActiveWorkbook.ActiveSheet.Range("C14")
TB.Cells(sMaxZeile, 7) = ActiveWorkbook.ActiveSheet.Range("C15")

TB.Cells(sMaxZeile, 10) = ActiveWorkbook.ActiveSheet.Range("C17")



' Formel in Spalte H
TB.Cells(sMaxZeile, 8).FormulaR1C1 = "=(RC3-R[-1]C3)/(RC1-R[-1]C1)"

' Formel in Spalte I
TB.Cells(sMaxZeile, 9).FormulaR1C1 = "=(RC[-1])/24"

' Formel in Spalte L
TB.Cells(sMaxZeile, 12).FormulaR1C1 = "=TEXT(RC[-11]-1,""TTTT"")"


Range("A2").Select

Application.ScreenUpdating = True

End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 10:28:27
GerdL
Hola,
gibt es einen Unterschied zwischen Ws und Activeworkbook.ActiveSheet und (nur) Range?

TextBox4.SetFocus
If IsNumeric(TextBox4.Text) Then
Ws.Range("C17").Value = CDbl(TextBox4.Text)
Else
'?
End If

Hth Gerd

AW: Fehler bei Nichteingabe
21.07.2023 14:16:57
chris58
Danke für die Aufklärung ...................es geht so.........
nur was kann ich nun eingeben, damit der Courser wieder in die Textbox4 springt und nicht alle Daten eingibt und ich wieder alles neu machen muß.....also Zeile löschen und von neuem eingeben.
Wäre sehr nett, wenn du mir das scheiben würdest.
Danke chris

TextBox4.SetFocus
If IsNumeric(TextBox4.Text) Then
Range("C17").Value = CDbl(TextBox4.Text)
Else
MsgBox "PV Eingabe fehlt!" '?
End If

Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 14:23:36
Daniel
HI
normalerweise macht man das so, dass man in den Button-Makros zuerst prüf, ob alle Bedingungen für eine Ausführung erfüllt sind und wenn nein, das Makro abbricht.

also im Prinzip so (Code nur beispielhaft, bitte nicht kopieren)
Private Sub Commandbutton_Click()
if Not IsNumeric(Textbox1.Text) then
    Msgbox "Bitte eine Zahl in Textbox1 eintragen!" '---> Meldung
    Textbox1.SetFocus '---> Textbox aktivieren
     Exit Sub '---> Makro sofort beenden
End if

hier dann den Code der laufen soll, wenn alles korrekt ist (den hast du ja)

Unload Me '--- Userform schließen
End Sub
Gruß Daniel

Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 14:42:50
chris58
Hallo !
Ich habe das nun so eingegeben und es passt. Nur eines noch, der Code schreibt mir den Wert nicht in C17.
lg chris

If Not IsNumeric(TextBox4.Text) Then
MsgBox "PV Einspeisung eigeben !" '---> Meldung
TextBox4.SetFocus '---> Textbox aktivieren
Exit Sub '---> Makro sofort beenden
UserForm1.TextBox4.SetFocus
Range("C17").Value = CDbl(TextBox4.Text)
End If

AW: Fehler bei Nichteingabe
21.07.2023 14:43:22
chris58
Hallo !
Ich habe das nun so eingegeben und es passt. Nur eines noch, der Code schreibt mir den Wert nicht in C17.
lg chris

If Not IsNumeric(TextBox4.Text) Then
MsgBox "PV Einspeisung eigeben !" '---> Meldung
TextBox4.SetFocus '---> Textbox aktivieren
Exit Sub '---> Makro sofort beenden
UserForm1.TextBox4.SetFocus
Range("C17").Value = CDbl(TextBox4.Text)
End If

Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 14:59:39
Daniel
ja, weil du blöd bist, einfache Anweisungen zu verstehen, sobald sie auch nur minimal abstrahiert sind.

mit " hier dann den Code der laufen soll, wenn alles korrekt ist (den hast du ja)" war ja genau das "Range("C17").Value = CDbl(TextBox4.Text)" gemeint.
jetzt schau nochmal, wo ich das im Code platziert habe und wo du es platziert hast.
entscheidend ist die Position zum END IF.

denn im IF-Block wird alles, was zwischen IF...THEN und END IF steht, nur dann ausgeführt, wenn die Bedingung erfüllt ist.

Gruß Daniel

AW: Fehler bei Nichteingabe
21.07.2023 17:02:09
chris58
Hallo Daniel !
Ja, in dieser Weise bin ich blöd, da ich das einfach nicht kapiere. Ich sage Dir aber eine Weisheit, diese stammt von Charles de Gaulle
(dieses geht in etwa so): Staaten haben keine Freund, nur Interessen. Denk darüber nach und Du weißt, was ich damit meine. In diesem Sinne danke ich nochmals für Deine Hilfe (ich habe es nun gelöst - es geht wie am Schnürchen).
lg chris

Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 17:25:42
Daniel
du kennst sicherlich:
"gib einem Hungrigen einen Fisch, dann ist er heute satt und hat morgen wieder Hunger. Zeige ihm wie man angelt, dann wird er nie mehr hungrig sein."
ich versuche halt auch die, die nur die Fische abgreifen wollen, zum Angeln zu motivieren.

AW: Fehler bei Nichteingabe
21.07.2023 10:54:28
Daniel
HI
die ganzen C-Umwandlungsfunktionen (CDbl, CLng, CInt, CSng) wandeln einen Text nur dann in eine Zahl um, wenn dieser auch vollständig einer Zahl entspricht, im anderen Fall ergeben sie den von dir beobachteten Fehler.
Leider wird auch der Text "" (Leerstring) nicht die Zahl 0 gewandelt, sondern erzeugt den Fehler.

das sicherste ist, wenn du wie von Gerd gezeigt, mit IF ISNumeric(Textbox1.Text) vorab prüfst, ob der Text in eine Zahl wandelbar ist.

die andere Variante ist die Umwandlung mit der Funktion VAL(Textbox1.Text)
Val erzeugt keinen Fehler, wenn der Text nicht in eine Zahl wandelbar ist, sondern gibt 0 aus.
allerdings arbeitet VAL immer mit den amerikanischen Formaten, dh wenn du Dezimalzahlen hat, musst du diese immer mit dem Punkt als Dezimalzeichen angeben, während die C-Funktionen sich an deiner Ländereinstellung orientieren.
in Deutschland müsste man dann VAL(Replace(Textbox1.Text, ",", ".")) verwenden, falls Kommazahlen eingegeben werden.

Gruß Daniel

Anzeige
AW: Fehler bei Nichteingabe
21.07.2023 13:15:27
chris58
Hallo Daniel/ Hallo GerdL !
Danke für die Änderung des Codes. Ich habe das einfachere genommen und mich für
UserForm1.TextBox4.SetFocus
Range("C17").Value = Val(TextBox4.Text)
entschieden. Muß gestehen das andere, da weiß ich nicht, was ich statt dem ? in den Code eingeben soll.
Ich bedanke mich sehr herzlich für die rasche Hilfe. Ich bin zufrieden mit dem, das es einfach die Zahl 0,00 eingibt, wenn ich es vergeß einzutragen.
chris

AW: Fehler bei Nichteingabe
21.07.2023 13:26:56
Daniel
naja, bei dem ? musst du den Code eintragen, der ablaufen soll, wenn der Eingabewert sich nicht in eine Zahl wandeln lässt.
da hast du ja verschiedene Möglichkeiten, z.B. als Wert 0 annehmen und einfach weiter machen, oder den Anwender mit einer Meldung darauf hinweisen, dass er hier was falsches eingebeben hat und dann abbrechen.
Gruß Daniel

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige