Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
748to752
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
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Textboxeingaben

Textboxeingaben
25.03.2006 11:55:37
Erich
Hallo Excellenzen,
in einer userform sollen über textboxen zahleneingaben gemacht werden, die
dann mittels OK-button in eine tabelle übertragen werden bspw. textbox1 in A1
wobei range("A1").value=15. Dabei soll folgendes passieren:
1. ist der in der textbox eingegebene wert kleiner (also bspw. 14) oder
gleich (15) dem wert der in die zu übertragende zelle, soll darauf
hingewiesen werden und es darf erst weitergearbeitet werden, wenn das nicht
mehr so ist oder die textbox leer bleibt
2. ist in der textbox kein wert eingegeben also textbox1.value="" dann soll
der wert in der zu übertragende zelle nicht verändert werden, also A1 bleibt
15.
Mein (erfolgloser) Ansatz zu 1:

Private Sub TextBox1_Change()
alterwert = Range("A1").Value
Do While TextBox1.Value <= alterwert
MsgBox "aktueller wert gleich oder kleiner alter wert!", vbOKOnly
If TextBox1.Value > alterwert Then
Exit Do
Loop
End Sub

Mein Ansatz zu 2:

Private Sub CommandButton1_Click()
If TextBox1 = "" Then
Range("A1").Value = Range("A1").Value
Else
Range("A1").Value = TextBox1.Value
End If
Unload Me
End Sub

Was stimmt bei 1 nicht? Kann man 2 noch irgendwie vereinfachen/verbessern?
Schonmal vielen Dank für eure Hilfe

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textboxeingaben
25.03.2006 13:20:35
Franz
Hallo Erich,
den Code für Ansatz 1 müsstest wie folgt anpassen:

Private Sub TextBox1_Change()
Alterwert = Range("A1").Value
If TextBox1.Value <> "" Then
Do While CDbl(TextBox1.Value) <= Alterwert
MsgBox "aktueller wert gleich oder kleiner alter wert!", vbOKOnly
If TextBox1.Value > Alterwert Then Exit Do
Loop
End If
End Sub

Ich würde die Textbox nicht bei jeder Wertänderung prüfen, sondern nur wenn sie verlassen wird. Bei mehrstelligen Zahlen wird sonst nach jeder Ziffer die Meldung angezeigt und das nervt. Die Function hab ich eingerichtet, da man so einfach mehrere Boxen prüfen kann ohne ständig den Code wiederholen zu müssen. Die Wiederholung der Wertprüfung bei Klick auf den OK-Button ist in meiner Variante erforderlich, da noch unzulässige Werte eingetragen sein können.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Value <> "" Then
If Boxpruefung(TextBox1.Value, Range("A1")) = False Then TextBox1.SetFocus
End If
End Sub
Private Sub CommandButton1_Click()
If TextBox1 <> "" Then
If Boxpruefung(TextBox1.Value, Range("A1")) = False Then
TextBox1.SetFocus
Exit Sub
Else
Range("A1").Value = CDbl(TextBox1.Value)
End If
End If
Unload Me
End Sub
Private Function Boxpruefung(BoxWert As String, Alterwert As Double) As Boolean
' Überprüfung, ob Boxwert größer alter Wert ist
If CDbl(BoxWert) <= Alterwert Then
MsgBox "aktueller wert gleich oder kleiner alter wert! " & vbLf & "alter Wert: " & Alterwert, vbOKOnly
Boxpruefung = False
Else
Boxpruefung = True
End If
End Function

mfg
Franz
Anzeige
AW: Textboxeingaben
25.03.2006 14:42:31
Erich
Hallo Franz,
vielen Dank. Das klappt ja wunderbar. Jetzt hab ich (leider) 15 textboxen,
gibt es eine möglichkeit den umstand zu umgehen, alle 15 textboxen einzeln anzusprechen?
Gruß
Erich
AW: Textboxeingaben
25.03.2006 16:08:38
Franz
Hallo Erich,
ich habe noch einmal ein wenig am Code gebastelt. Ganz ohne zusätzliche Eingaben pro TextBox geht es nicht, aber ich hab die notwendigen Eingaben/Wiederholungen im Code ziemlich stark minimiert.
Public Pruefergebnis As Boolean
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Pruefung(Me.ActiveControl.Name, Range("A1"))
End Sub
' Hier den Code für die übrigen Textboxen einfügen.
' Es ist jeweils die Zelle mit dem alten Wert anzugeben
Private Sub TextBox15_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Pruefung(Me.ActiveControl.Name, Range("P1"))
End Sub
Private Sub CommandButton1_Click()
Dim lement As Control
Pruefergebnis = True
For Each Element In Me.Controls
Select Case Element.Name
Case "TextBox1"
Call PruefungOK(Element.Name, Range("A1"))
' Hier den Code für die übrigen Textboxen einfügen.
' Es ist jeweils der Name der Textbox und die Zelle mit dem alten Wert anzugeben
Case "TextBox15"
Call PruefungOK(Element.Name, Range("P1"))
End Select
If Pruefergebnis = False Then Exit Sub
Next Element
Unload Me
End Sub
Private Function Boxpruefung(BoxWert As String, AlterWert As Double) As Boolean
' Überfrüfung, ob Boxwert größer alter Wert ist
If CDbl(BoxWert) <= AlterWert Then
MsgBox "aktueller wert gleich oder kleiner alter wert! " & vbLf & "alter Wert: " & AlterWert, vbOKOnly
Boxpruefung = False
Else
Boxpruefung = True
End If
End Function
Private Sub Pruefung(Box As String, AlterWert As Range)
'Prüfung der Textboxen während der Eingabe
With Me.Controls(Box)
If .Value <> "" Then
If Boxpruefung(.Value, AlterWert.Value) = False Then
End If
End If
End With
End Sub
Private Sub PruefungOK(Box As String, AlterWert As Range)
'Prüfung der Textboxen nach OK-Klick
With Me.Controls(Box)
If .Value <> "" Then
If Boxpruefung(.Value, AlterWert.Value) = False Then
.SetFocus
Pruefergebnis = False
Else
AlterWert.Value = CDbl(.Value)
End If
End If
End With
End Sub

mfg
Franz
Anzeige
AW: Textboxeingaben
25.03.2006 20:19:55
Erich
Hallo Franz,
vielen Dank für den neuen Code, aber beim umsetzen bzw. ausführen kommt die fehlermeldung "Objektvariable oder with-blockvariable nicht festgelegt". Habe probiert es zu beheben, aber bin wohl noch zu sehr VBA-Laie.
Werde die Textboxen eben einzeln ansprechen - ist ja mittels copy&paste nicht so wild ;-)
Nochmals vielen Dank für Deine Mühe

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige