Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA: Zahleneingabe in Textfeld (User-Form)

1,312 views
Skip to first unread message

Ing. Ludwig Trksak

unread,
Oct 27, 1998, 3:00:00 AM10/27/98
to
Wie kann ich ein Textfeld in einem User-Form dazu bringen, als Eingabe nur
Zahlen (mit denen man weiterrechnen kann) zu akzeptieren?

(Excel 8)

--
Ing. Ludwig Trksak
LOLO Fahrwerkstechnik
lo...@lolo.co.at
http://www.lolo.co.at/lolo


Hans W. Herber

unread,
Oct 28, 1998, 3:00:00 AM10/28/98
to
Hallo Ludwig,

in der Entwicklungsumgebung das Textfeld doppelklicken und in das sich
öffnende Modul folgenden Code eingeben:

Private Sub TextBox1_Change()
If Len(TextBox1.Text) = 0 Then Exit Sub
If Not IsNumeric(TextBox1.Text) Then
Beep
MsgBox "Nur Zahlen bitte!"
End If
End Sub

hans

########################################################
# Herber's Excel-Server - letztes Update: 27.10.98 #
# http://www.herber.de - Microsoft MVP - Excel #
# Neu bei der Freeware: DejaNews-Abfrage - XL8 #
########################################################
--

Ing. Ludwig Trksak <lo...@lolo.co.at> wrote in message
O1LhZJcA#GA....@uppssnewspub05.moswest.msn.net...

Ing. Ludwig Trksak

unread,
Oct 30, 1998, 3:00:00 AM10/30/98
to
Hallo Hans

Danke für (wieschonsooft) die prompte Lösung!
Ich hab den Code dahingehend verändert, daß das lästige Wegklicken der
Fehlermeldung entfällt. Wenn eine Taste gedrückt wird, die keine Ziffer ist,
geschieht ganz einfach garnix.

Private Sub txbFW_change()

If IsNumeric(txbFW.Value) Or Len(txbFW.Text) = 0 Then
Else:
txbFW.Value = txbFW.Tag
End If

sonstiger Code

txbFW.Tag = txbFW.Value
End Sub


--
Ing. Ludwig Trksak
LOLO Fahrwerkstechnik
lo...@lolo.co.at
http://www.lolo.co.at/lolo

Hans W. Herber schrieb in Nachricht <7165b6$ki8$5...@news00.btx.dtag.de>...

Hans W. Herber

unread,
Nov 2, 1998, 3:00:00 AM11/2/98
to
Hallo Ludwig, Michael,

einfacher? NaJa.

Wie folgt:

Private Sub TextBox1_Change()
If Len(TextBox1.Text) = 0 Then Exit Sub
If Not IsNumeric(TextBox1.Text) Then

TextBox1.Text = ""
End If
End Sub

hans

########################################################
# Herber's Excel-Server - letztes Update: 02.11.98 #


# http://www.herber.de - Microsoft MVP - Excel #
# Neu bei der Freeware: DejaNews-Abfrage - XL8 #
########################################################
--

Michael Schwimmer <Schw...@t-online.de> wrote in message
71dgr1$5ga$1...@news02.btx.dtag.de...
Einfacher geht's so :
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr(1, "1234567890", Chr$(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
MfG
Michael

Ing. Ludwig Trksak schrieb in Nachricht ...

Ing. Ludwig Trksak

unread,
Nov 2, 1998, 3:00:00 AM11/2/98
to
Wenn ich bei diesem, von Dir vorgeschlagenen Modul fünf Ziffern und dann
versehentlich ein Sonderzeichen tippe sind die fünf Ziffern weg und ich kann
sie nochmals eingeben.
Die von mir vorgeschlagene Lösung erhält den korrekten Teil der Eingabe!

--
Ing. Ludwig Trksak
LOLO Fahrwerkstechnik
lo...@lolo.co.at
http://www.lolo.co.at/lolo

Hans W. Herber schrieb in Nachricht <71jk62$gqs$1...@news02.btx.dtag.de>...

Hans W. Herber

unread,
Nov 2, 1998, 3:00:00 AM11/2/98
to
Hallo Ludwig,

sorry, ich hatte Deine Nachricht falsch verstanden.

hans

########################################################
# Herber's Excel-Server - letztes Update: 02.11.98 #
# http://www.herber.de - Microsoft MVP - Excel #
# Neu bei der Freeware: DejaNews-Abfrage - XL8 #
########################################################
--

Ing. Ludwig Trksak <lo...@lolo.co.at> wrote in message

Michael Schwimmer

unread,
Nov 4, 1998, 3:00:00 AM11/4/98
to
Hallo Hans
Wollte das eigentlich in die Newsgroup senden, ist aber wohl auch bei dir als Mail gelandet.
Tschuldigung.
Ich glaube immer noch, das folgende Zeile Code die einfachste Methode
ist, um zu garantieren, das ausschließlich Zahlen in ein Textfeld eingegeben werden können.

Private Sub NumerischesFeld_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


If InStr(1, "1234567890", Chr$(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Das Problem dabei ist, das ausschließlich ganze Zahlen eingegeben werden können. Nimmt man nun noch das Komma in den String auf, ist es zwar möglich, auch Kommazahlen einzugeben, birgt aber die Gefahr, das Komma an den Anfang zu setzen oder mehrmals einzugeben, was bei einer Typenumwandlung zu Fehlermeldungen führt.
Die Überprüfung auf IsNumeric(NumerischesFeld.Text) z.b. im Change Ereignis kann das verhindern, aber es erfordert zusätzlichen Aufwand, durch eine statische oder auf Modulebene deklarierte Variable, den Text bei einer Fehleingabe in den ursprünglichen Zustand zurückzuversetzen. Folgendes funktioniert auch ohne solche (ekligen) Variablen.

Private Sub NumerischesFeld_Change()
If Left$(NumerischesFeld.Text, 1) = "," Then
NumerischesFeld.Text = Mid$(NumerischesFeld.Text, 2, Len(NumerischesFeld.Text))
End If
End Sub

Private Sub NumerischesFeld_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr(1, NumerischesFeld.Text, ",") <> 0 And Chr$(KeyAscii) = "," Then KeyAscii = 0: Exit Sub
If InStr(1, "1234567890,", Chr$(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Die Abfrage in der Change-Prozedur dient dazu, das setzen des Kommas an den Anfang zu verhindern. Mir ist leider nichts anderes eingefallen.

Michael

Hans W. Herber schrieb in Nachricht <71jk62$gqs$1...@news02.btx.dtag.de>...
>Hallo Ludwig, Michael,
>
>einfacher? NaJa.
>
>Wie folgt:
>
>Private Sub TextBox1_Change()
> If Len(TextBox1.Text) = 0 Then Exit Sub
> If Not IsNumeric(TextBox1.Text) Then
> TextBox1.Text = ""
> End If
>End Sub
>

Ing. Ludwig Trksak

unread,
Nov 12, 1998, 3:00:00 AM11/12/98
to
Mein Code ist bereits in Verwendung und tut genau was er soll und läßt auch
nur ein einziges Komma zu, damit bin ich unter dem dicken Strich sogar mit
weniger Zeilen ausgekommen. Allerdings braucht er eine (ekelige) Variable.

zu dem zweiten, von Dir vorgeschlagenen Modul hätte ich noch einen
Verbesserungsvorschlag:

Private Sub NumerischesFeld_Change()
If Left$(NumerischesFeld.Text, 1) = "," Then
NumerischesFeld.Text =

Application.WorksheetFunction.Substitute(NumerischesFeld.Text, ",", "0,")
End If
End Sub

dann kannst Du Dir bei der Eingabe die führende Null vor dem Koma schenken,
genauso wie auf den meisten Taschenrechnern oder im EXCEL Worksheet.

--
Ing. Ludwig Trksak
LOLO Fahrwerkstechnik
lo...@lolo.co.at
http://www.lolo.co.at/lolo

Michael Schwimmer schrieb in Nachricht <71q1i1$6bp$1...@news01.btx.dtag.de>...

0 new messages