Frage von StillGamingLP, 60

Was stimmt an meinem VBA Code nicht?

Hallo an alle Informatikbegeisterten!

Ich habe folgenden Code geschrieben:


Public Text1 As String
Public Text3 As Date
Public Text2 As Long

Private Sub CommandButton1_Click()

Text1 = Me.TextBox1.Text
Text3 = CDate(Text1)
Text2 = TextBox2.Value

If Text3 = Format(Text3, "DD/MM/YYYY") Then

If Not Text3 = Format(Text3, "DD/MM/YYYY") Then
MsgBox ("Ups, Sie haben kein korrektes Datum eingegeben!")
End If

With Me.TextBox1
Cells(65000, 1).End(xlUp).Offset(1, 0).Activate
ActiveCell = Text3
End With

With Me.TextBox2
Cells(65000, 2).End(xlUp).Offset(1, 0).Activate
ActiveCell = Text2
End With

Else
MsgBox ("Irgendetwas stimmt nicht!")
End If

TextBox1 = ""
TextBox2 = ""

End Sub 

Ich weiss aber nicht was mein Fehler ist könnte mir jemand Bitte helfen?

Er gibt immer an das ich einen TYPENVERWECHSELUNGSFEHLER habe!

Das wäre sehr nett von euch!

Ich Danke schon im Voraus! Freundliche Grüsse StillGamingLP


Antwort
von Suboptimierer, 36

Setz mal Haltepunkte und debugge durch.

Gib zwischendurch mit debug.print "Variable: " & myVar die Zwischenwerte aus.

______________

  • Hinter der ersten MsgBox würde ich ein Exit Sub schreiben.
  • Die With-Anweisungen sind überflüssig.
  • Wenn du 'If Text3 = Format(Text3, "DD/MM/YYYY") Then' abfragst, bringt es nichts, wenn du in der Zeile darauf 'If not Text3 = Format(Text3, "DD/MM/YYYY") Then' abfragst, denn in das zweite If wird er niemals einsteigen.
  • Setz mal die Eingangsparameter manuell, z. B. so:
    Text1 = "01.02.2016" 
    Text3 = CDate(Text1)
    Text2 = 100 
Kommentar von StillGamingLP ,

Ich habe glaube ich vergessen zu erwähnen, dass ich totaler VBA Anfänger bin ich habe keine Ahnung. Könntest du mir diesen Code so umschreiben, dass er funktioniert. Das wäre sehr lieb von dir, ich wäre dir auch sehr dankbar! Lg StillGamingLP

Antwort
von Ninombre, 30

Du hast keine Feldprüfungen eingebaut, deswegen knallt es bei Fehleingaben. Wenn ich mir eine Userform mit den 2 TextBoxen und dem Button baue und dann in TextBox 1 z.B. 22.2.1922 und in TextBox 2 eine Zahl eingebe, dann funktioniert es.

Textbox2 darf aber kein Buchstabe sein und nicht leer, da als Long deklariert. Mach da ein String daraus, dann entfällt das Problem. Es wird ohnehin ja nur in die Zelle geschrieben. Falls doch weitergerechnet werden muss, baue noch ein (direkt am Anfang)
If IsNumeric(TextBox2.Value) = False Then
MsgBox ("Das ist keine Zahl")
Exit Sub
end if

So lässt sich auch TextBox1 prüfen:
If IsDate(TextBox1.Value) = False Then
MsgBox ("Das ist kein Datum")
Exit Sub
End If

Dort tritt sonst auch das Problem bei Fehleingaben auf.

Den Code danach kannst Du dann auch etwas einfacher halten. Die Feldprüfungen sind erledigt, also direkt einfügen in die Tabelle.

Kommentar von Ninombre ,

Mein Ansatz in einfacherer Form: Public brauchst Du nur, wenn Sub übergreifend gearbeitet werden muss, Variablen eigentlich auch nur, wenn häufiger darauf zurückgegriffen werden soll:

Private Sub CommandButton1_Click()

If IsDate(TextBox1.Text) = False Then
MsgBox ("Bitte gültiges Datum eingeben")
Exit Sub
End If
If IsNumeric(TextBox2.Text) = False Then
MsgBox ("Bitte eine Zahl eingeben")
Exit Sub
End If

With Me.TextBox1
Cells(65000, 1).End(xlUp).Offset(1, 0).Activate
ActiveCell = CDate(TextBox1.Text)
End With

With Me.TextBox2
Cells(65000, 2).End(xlUp).Offset(1, 0).Activate
ActiveCell = TextBox2.Text
End With
TextBox1 = ""
TextBox2 = ""
End Sub

Es ist ansonsten wirklich gut, dass Du Dich selbst an der Lösung versuchst, nur so kann man was neues lernen (gilt auch für mich...), oftmals wird nur nach der schnellen fertigen Lösung gefragt, ohne Interesse wie es funktioniert und warum.

Kommentar von StillGamingLP ,

Danke für deine schnelle Antwort bin dir sehr dankbar dafür!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten