Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
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
Textboxen ausserhalb der Userform auswerten
04.10.2017 15:44:46
Steffen
Hallo,
ich habe in meinen Userforms viele Textfelder, wo die Auswertung immer identische ist (wie in diesem Beispiel "Datum", dieser Code steht in manchen Userforms bis zu 10 mal (nur halt für unterschiedliche Textfelder)
Da das nur den Code unnötig lang und unübersichtlich macht, möchte ich den Code für solche Textfelder in einem eigenen Modul sammeln und diese dann immer nur abrufen (z.B. über: "Call Modul1.Datum_KeyPress(?)")
Leider fehlt mir die Idee wie dieses Funktionierten könnte.
Kann mir da Bitte jemand Helfen? Danke :)

Private Sub txtDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txtDatum = "" Then Exit Sub
On Error Resume Next
txtDatum = Format(txtDatum, "DD.MM.YYYY")
If Not IsDate(txtDatum) Then
txtDatum = ""
Cancel = True
MsgBox ("Bitte geben sie ein gültiges Datum ein")
End If
End Sub

Private Sub txtDatum_Change()
If Len(txtDatum) = 2 Or Len(txtDatum) = 5 Then txtDatum = txtDatum & "."
End Sub

Private Sub txtDatum_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 And txtDatum = "" Then txtDatum = Format(Date, "DD.MM.YYYY")
End Sub

Private Sub txtDatum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case Len(txtDatum.Text)
Case 0, 1, 3, 4, 6, 7, 8, 9
If Not Chr(KeyAscii) Like "#" Then KeyAscii = 0
Case 2, 5
KeyAscii = 46
Case Else
KeyAscii = 0
End Select
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 16:47:07
onur
Was genau willst du denn mit den vielen subs erreichen?
Dass nur ein Datum eingegeben werden kann?
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 17:23:33
Steffen
So in etwa, es erzwingen und etwas unterstützen;)
Das sollen die Einzelnen Events machen:
Exit= Endkontrolle ob es ein richtiges Datum ist
Change= Die Punkte Automatisch setzen
KeyPress= Nur Zahlen sind erlaubt
KeyDown=In ein Leeres Textfeld wird das Heutige Datum eingesetzt
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 17:50:45
onur
Du verwöhnst den User.
Wenn du nur den folgenden Code nimmst, wird bei leer "heute" eingesetzt, jede einigermassen als Datum erkennbare Eingabe angenommen (egal ob mit Punkt oder Schrägstrich), sonst nicht angenommen und auf korrekte Eingabe gewartet.
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 = "" Then TextBox1 = Date
If Not IsDate(TextBox1) Then
TextBox1 = ""
Cancel = True
Else
TextBox1 = Format(TextBox1, "Short Date")
End If
End Sub

Anzeige
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 18:31:31
Steffen
Ja Schon es soll ja schnell gehen da das Einsatzprotokolle sind, d.h. die sollen sehr schnell und einfach ausgefüllt werden;) (da verwöhne ich lieber etwas zu viel ^^.
Aber das ist ja gerade nicht mein Problem;) sondern Das ich die Codezeilen in manchen Protokollen 10 mal schreiben muss (jeweils für eine andere TextBox. Deswegen möchte ich den Hauptcode aus der Userform auslagern.
Das ist mir mittlerweile doch schon recht gut gelungen ich bekomme nur das Cancel vom Exit-Event nicht richtig ausgewertet :(
(er löscht zwar den Zellinhalt, führt danach aber andere Codes aus, anstatt das Textfeld wieder zu aktivieren)
aktuell mache ich es jetzt so:
Prozeduraufruf in der Userform (Kommentar=Event {um ein paar zeilen zu sparen})
    TextBox1 = Modul1.DatumÄndern(TextBox1.Text) 'Change
TextBox1 = Modul1.DatumExit(TextBox1.Value) 'Exit
TextBox1 = Modul1.DatumSchnellwert(TextBox1.Value, KeyCode.Value) 'KeyDown
Modul1.DatumTaste TextBox1.Text, KeyAscii 'KeyPress
Code in Modul1
Function DatumÄndern(Wert As String) As String
Select Case Len(Wert)
Case 2, 5
DatumÄndern = Wert + "."
Case Else
DatumÄndern = Wert
End Select
End Function
Function DatumExit(ByVal Wert As String) As String
If Wert = "" Then Exit Function
On Error Resume Next
Wert = Format(Wert, "DD.MM.YYYY")
If Not IsDate(Wert) Then
DatumExit = ""
MsgBox ("Bitte geben sie ein gültiges Datum ein")
Else
DatumExit = Wert
End If
End Function
Function DatumSchnellwert(ByVal Wert As String, ByVal KeyCode As Integer) As String
If KeyCode = 13 And Wert = "" Then
DatumSchnellwert = Format(Date, "DD.MM.YYYY")
Else
DatumSchnellwert = Wert
End If
End Function
Function DatumTaste(ByVal Wert As String, ByVal KeyAscii As MSForms.ReturnInteger) As MSForms. _
ReturnInteger
Select Case Len(Wert)
Case 0, 1, 3, 4, 6, 7, 8, 9
If Not Chr(KeyAscii) Like "#" Then KeyAscii = 0
Case 2, 5
KeyAscii = 46
Case Else
KeyAscii = 0
End Select
Set DatumTaste = KeyAscii
End Function

Anzeige
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 19:11:38
onur
Modul1. bei Modul1.DatumÄndern(TextBox1.Text) usw kannst du weglassen, wenn du alle funktionen public machst.
zu Exit: Cancel = True setzt den Cursor wieder zurück (siehe mein Code)
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 19:28:20
Steffen
Da ist das Problem :(
wie schaffe ich es das meine Funktion (in Modul 1) den cancel Wert (in der Userform) auf True setzt?
wegen dem weglassen:
Ich weiß :)
ich mache das aber immer so, da ich z.B. meine Userforms immer gleich aufbaue:
die habe alle einen Sub der "Laden", "Schreiben", "Prüfen", "Ansichtsanpassung", "Werte_Laden" heißt.
Da will ich damit verhindern das mir versehentlich durch die Doppel-Deklaration der Falsche Code ausgeführt wird :)
Oder hilft das wenn ich aus den SUB ein privat-Sub mache? da die ja eh nur in der Userform stehen.
Anzeige
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 19:38:59
onur
Du kannst alles so lassen, wie am Anfang (mit all den events),
du musst nur (wie hier) in den events
Private Sub TextBox1_Change()
Dim nam
nam = ActiveControl.Name

die 2 Zeilen (2+3) hinzufügen, dann musst du statt z.B.

Textbox1.Text=
UserForm1.Controls(nam).Text = 

einsetzen und den gleichen Code für alle Textboxen benutzen.
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 19:57:05
onur
Mit dem richtigen Visual Basic kannst du Arrays von Controls (wie z.B. TextBoxen) asnlegen, die man dann mit dem Index abfragen kann, dann hast du immer nur ein code für z.B. 10 Textboxen.
Aber VBA unterstützt das nicht (ist ja auch nur eine adaptierte abgespeckte Version von VB).
Aber wie gesagt, wenn du die beiden Zeilen in jedes Event hinzufügst und alle TextBoxXY.usw durch
UserForm1.Controls(nam)XY.usw ersetzt, kannst du in sämtlichen Textboxen die exakt gleichen Codes benutzen, da die Nummer der Textbox ja wegfällt.
Anzeige
AW: Textboxen ausserhalb der Userform auswerten
04.10.2017 20:17:46
Steffen
Achso, na dann schaue ich mal weiter
Danke für deine Hilfe, aber dann habe ich ja wieder diese Zeilen drin.
So schlimm ist das mit dem Cancel auch nicht.
Da wenn das "Protokoll erstellt" wird, sich ein Anderer Code über das Leere Feld beschwert, da es ein "Pflichtfeld" ist und immer ausgefüllt werden muss.
Wenn nur die "Werte gespeichert" werden, ist es halt ein leeres Feld welches beim Erneuten Aufruf später ausgefüllt werden muss.
Danke aber für die Hilfe :)

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige