Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1284to1288
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

Pattern gesucht

Pattern gesucht
09.11.2012 15:11:53
Peter
Hallo RegEx Experten,
ich suche ein Pattern zur Prüfung einer Eingabe in der Form 1234 x 1234
wobei die Zahlen vor und hineter dem " x " 1 - 4 stellig sein dürfen.
Geprüft soll im KeyPress Ereignis werden.
'
'   So kann man "online" verhindern dass etwas anderes als Zahl x Zahl
'   eingetragen wird.
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim Regex As Object
'Stop
Set Regex = CreateObject("vbScript.Regexp")
With Regex
'    \d = erkennt Ziffern, + erkennt vorhergehendes Element ein- oder mehrmals
'    [ x ] ein Blank x Blank muss folgen
'    weitere Ziffern müssen folgen
.Pattern = "\d+[ x ]d+"
If .test(TextBox1.Text & Chr(KeyAscii)) = False Then KeyAscii = 0
End With
End Sub

Gruß Peter

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pattern gesucht
09.11.2012 16:27:52
CitizenX
Hi,
teste mal :

^\d{1,4}\sx\s\d{1,4}$
Grüße
Steffen

AW: Pattern gesucht
09.11.2012 16:40:22
Peter
Hallo Steffen,
leider funktioniert auch Dein Pattern (ebenso, wie meine Versuche) nicht.
Die TextBox bleibt leer, es wird keine Eingabe akzeptiert.
Gruß Peter

AW: Pattern gesucht
09.11.2012 19:56:07
Nepumuk
Hallo,
klar, denn eine einzelne Ziffer wird bei dem Pattern nicht akzeptiert. Da fehlen schließlich noch die Leerzeichen, das x und mindestens eine folgende Ziffer. Warum willst du das überhaupt just in time prüfen? Ich lass meine User erst mal eingeben was sie wollen. Erst am Ende, wenn sie in die Tabelle schreiben wollen, wird verifiziert.
Gruß
Nepumuk

Anzeige
AW: Pattern gesucht
09.11.2012 20:25:42
Peter
Hallo Nepumuk,
sicherlich kann man das auch später noch abprüfen.
Mich interessiert es nur, das im KeyPress Ereignis bereits abzufangen.
Gruß Peter

RegEx-Pattern bei KeyPress
09.11.2012 19:52:08
Erich
Hi Peter,
probier mal
.Pattern = "(^\d{1,4}$)|(^\d{1,4}\s$)|(^\d{1,4}\sx$)|(^\d{1,4}\sx\s$)|(^\d{1,4}\sx\s\d{1,4}$)"
Es geht vermutlich kürzer, sollte aber schon mal funktionieren.
Das Problem deines Codes (und auch von Steffens Vorschlag):
Du prüfst im TextBox1_KeyPress, nicht beim Exit der Textbox.
Beim Tippen des ersten Zeichens steht der Rest ja noch nicht auch schon da, kann also noch nicht geprüft werden.
Im KeyPress muss die Prüfung jeden zulässigen Anfang der Eingabe akzeptieren.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
RegEx-Pattern bei KeyPress - kürzer
09.11.2012 20:14:29
Erich
Hi,
so ist es schon ein wenig kürzer:
.Pattern = "(^\d{1,4}$)|(^\d{1,4}\s$)|(^\d{1,4}\sx$)|(^\d{1,4}\sx\s\d{0,4}$)"
Noch eine Bemerkung:
Die Eingabeprüfung ist damit noch nicht erledigt. im KeyPress werden naturgemäß inkomplette Eingaben akzeptiert.
Du wirst (z. B. im Exit) prüfen müssen, ob die Eingabe am Ende auch komplett ist,
also nicht schon z. B nach den ersten drei Ziffern beendet wurde.
Da greift dann Steffens Pattern.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: RegEx-Pattern bei KeyPress - kürzer
09.11.2012 20:23:34
Peter
Hallo Erich,
ja, so funktioniert es schon mal recht gut.
Vielleicht lässt sich auf der Basis, das Pattern ja noch optimieren.
Danke für Deine Hilfe.
Gruß Peter

Anzeige
RegEx-Pattern bei KeyPress - noch kürzer
09.11.2012 20:27:34
Erich
Hi Peter,
so komm ich ins Lernen... :-)
.Pattern = "(^\d{1,4}\s?$)|(^\d{1,4}\sx$)|(^\d{1,4}\sx\s\d{0,4}$)"
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: RegEx-Pattern bei KeyPress - noch kürzer
09.11.2012 20:35:53
Peter
Hallo Erich,
dann muss ich offensichtlich noch erheblich dazulernen, was Pattern Zusammenstellung betrifft.
Danke, es funktioniert einwandfrei.
Peter

AW: RegEx-Pattern bei KeyPress - noch kürzer
09.11.2012 21:14:01
Peter
Hallo Erich,
ich habe zu früh gejubelt.
Es kann die Eingabe ja bereits nach den ersten 4 Ziffern verlassen werden und das soll nicht möglich sein.
Gültig ist nur eine Eintrag als Abmessung 1234 x 1234 oder eben auch 1 bis 4-stellige Zahlenwerte.
Gruß Peter

Anzeige
KeyPress - oder woanders?
10.11.2012 00:48:45
Erich
Hi Peter,
Nepumuk und ich haben versucht, dich auf diesen Umstand aufmerkasm zu machen:
"eine einzelne Ziffer wird bei dem Pattern nicht akzeptiert. Da fehlen schließlich noch die Leerzeichen,
das x und mindestens eine folgende Ziffer. Warum willst du das überhaupt just in time prüfen?"
"Im KeyPress muss die Prüfung jeden zulässigen Anfang der Eingabe akzeptieren."
"Die Eingabeprüfung ist damit noch nicht erledigt. im KeyPress werden naturgemäß inkomplette Eingaben akzeptiert.
Du wirst (z. B. im Exit) prüfen müssen, ob die Eingabe am Ende auch komplett ist,
also nicht schon z. B nach den ersten drei Ziffern beendet wurde."

Im KeyPress kann man nur verhindern, dass falsche oder zu viele Zeichen eingetippt werden - mehr nicht.
Insbesondere kann nicht geprüft werden, was nicht eingetippt wird.
Noch ein paar Gedanken dazu:
Bei der jetzigen Prüfung hat der User keine Chance weiterzukommen, wenn er es nicht schafft,
die drei Zeichen "Leerzeichen x Leerzeichen" einzugeben. Ich käme mir gegängelt vor.
Wozu lässt du den User eigentlich den vollen String eingeben? Zwei Ganzzahlen zwischen 1 und 9999
würden ausreichen, das "Leerzeichen x Leerzeichen" dazwischen kannst du im Programm setzen.
Zwei einfache Textboxen (für die Optik mit einem x als Label dazwischen), zwei einfache Prüfungen.
Wo du die abschließende Prüfung ansiedelst, hängt auch von der Umgebung ab. Eine oft sinnvolle Variante:
Wenn es so etwas wie einen "Senden"- oder "OK"-Button gibt, mit dem der User die Augabe der Daten
veranlassen kann, prüft man beim Klick auf den Button alle Daten auf Stimmigkeit.
Manchmal müssen die Daten ja auch zueinander passen. Dann kann man sowieso erst prüfen,
wenn alle Daten eingegeben sind.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Warum 1fach, wenn's auch kompliziert geht? ;-) orT
10.11.2012 04:48:12
Luc:-?
Gruß+schöWE, Luc :-?

AW: KeyPress - oder woanders?
10.11.2012 12:30:53
Peter
Hallo Erich,
es geht hier gar nicht unbedingt um das KeyPress Ereignis, sondern um die RegEx, mit denen ich gerade etwas gespielt habe.
Ihr habt mich überzeugt, dass das hier nicht das geeignete Verfahren ist, danke dafür.
Gruß Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige