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

Datumseingabe als Funktion

Datumseingabe als Funktion
06.02.2003 09:23:47
Anna
Hallo Spezialisten,

ich habe (natürlich hier im Forum) eine für mich geniale Datumsabfrage erhalten. Die funzt auch großartig. Nur muss ich insgesamt fast 50 Textboxen abfragen und will nicht 50x den Code reinschreiben. Kann man die Abfrage nicht als Funktion umschreiben, so dass ich nur jeder Textbox eine andere Variable zuweise und dann das Datum für diese jeweilige Textbox zurückerhalte. Ich hoffe Ihr könnt mir wieder einmal helfen, ich bin leider nicht so fit und auf Euch angewiesen.

Hier der Code (hier für die Textbox "txtFaelligkeit"):


Private Sub txtFaelligkeit_Change()
Dim dteEingabe As Date
Dim iDay As Integer, iMonth As Integer, iYear As Integer
If txtFaelligkeit.Text = "" Then Exit Sub
If Not IsNumeric(Right(txtFaelligkeit.Text, 1)) Then
beep
txtFaelligkeit.SelStart = Len(txtFaelligkeit.Text) - 1
txtFaelligkeit.SelLength = 1
If txtFaelligkeit.Text <> "TTMMJJJJ" Then
lblFaelligkeit.Caption = "Nur Ziffern erlaubt!"
End If
Exit Sub
Else
lblFaelligkeit.Caption = ""
End If
iDay = CInt(Left(txtFaelligkeit.Text, 2))
Select Case Len(txtFaelligkeit.Text)
Case 0
Case 1
If iDay > 3 Then
beep
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = 1
lblFaelligkeit.Caption = "Maximal 31 Tage"
Else
lblFaelligkeit.Caption = ""
End If
Case 2
If iDay > 31 Then
beep
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = 2
lblFaelligkeit.Caption = "Maximal 31 Tage"
Else
lblFaelligkeit.Caption = ""
End If
Case 3
iMonth = CInt(Right(txtFaelligkeit.Text, 1))
If iMonth > 1 Then
beep
txtFaelligkeit.SelStart = 2
txtFaelligkeit.SelLength = 1
lblFaelligkeit.Caption = "Maximal 12 Monate"
Else
lblFaelligkeit.Caption = ""
End If
Case 4
iMonth = CInt(Right(txtFaelligkeit.Text, 2))
If iMonth > 12 Then
beep
txtFaelligkeit.SelStart = 2
txtFaelligkeit.SelLength = 2
lblFaelligkeit.Caption = "Maximal 12 Monate"
Else
lblFaelligkeit.Caption = ""
End If
Select Case iMonth
Case 2
If iDay > 29 Then
beep
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = 4
lblFaelligkeit.Caption = "Maximal 29 Tage"
Else
lblFaelligkeit.Caption = ""
End If
Case 4, 6, 9, 11
If iDay > 30 Then
beep
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = 4
lblFaelligkeit.Caption = "Maximal 30 Tage"
Else
lblFaelligkeit.Caption = ""
End If
End Select
Case 8
iMonth = CInt(Mid(txtFaelligkeit.Text, 3, 2))
iYear = CInt(Right(txtFaelligkeit.Text, 4))
If iYear Mod 4 > 0 And iMonth = 2 And iDay = 29 Then
beep
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = 8
lblFaelligkeit.Caption = "Maximal 28 Tage"
Else
txtFaelligkeit.Text = DateSerial(iYear, iMonth, iDay)
dteEingabe = DateSerial(iYear, iMonth, iDay)
'lblEingang.Caption = dteEingabe & vbLf & Format(dteEingabe, "dddd")
txtFaelligkeit.SelStart = 0
txtFaelligkeit.SelLength = Len(txtFaelligkeit.Text)
'End If
txtEuroFaelligkeit.SetFocus
'cmdPruefung.SetFocus
End If
End Select
End Sub
Viele liebe Grüße aus Würzburg
Anna

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Datumseingabe als Funktion
06.02.2003 09:39:35
Michael Scheffler
Anna, oh Anna:-)

such mal im Archiv nach:

Eigene Klasse für Textboxen.

Wenn Du dann noch Fragen hast, lass es mich wissen.

Gruß

Micha

Ich hab noch tausend Fragen :-) ...
06.02.2003 10:00:45
Anna
Hallo Micha,
danke für den Tip, aber wo soll ich da suchen. Im Archiv ist alles nur nach Nummern sortiert und in den Recheren find ich nix über eigene Klassen für Textboxen. Bitte hilf mir weiter. Ich bin gern bereit mich erst zu belesen und dann wieder Fragen zu stellen.
Liebe Grüße
Anna
Re: Ich hab noch tausend Fragen :-) ...
06.02.2003 10:11:29
Micahel Scheffler
Hallo Anna,

ich finde es auch nicht.

Ich schreibe mal was.

Bis gleich

Micha

Re: Ich hab noch tausend Fragen :-) ...
06.02.2003 11:02:03
Michael Scheffler
Hallo Anna,

z.B.

das in ein Formular - TypeOf funzt bei mir nicht, deshalb der Namensabgleich.

Option Explicit
Option Base 1
Dim txtBoxes() As New clsText
Private Sub UserForm_Initialize()
Dim ctr As Control
Dim intCtr As Integer
intCtr = 1
For Each ctr In Controls
If ctr.Name Like "txt*" Then
ReDim Preserve txtBoxes(intCtr)
Set txtBoxes(intCtr).txtArray = Controls(ctr.Name)
intCtr = intCtr + 1
End If
Next
End Sub

Und das in eine Klassenmodul clsText - bitte Deinen Code ins Change reinschreiben:

Public WithEvents txtArray As msforms.TextBox

Private Sub txtArray_Change()
On Error GoTo ErrHandler
With txtArray
If Not IsNumeric(.Text) And _
.Text <> "" Then
Beep
MsgBox "Please enter numeric values!"
.SelStart = 0
.SelLength = .TextLength
End If
If InStr(.Text, ",") Then .Text = Replace(.Text, ",", ".")
End With
Exit Sub

ErrHandler:
If InStr(1, Err.Source, ":") = 0 Then Err.Source = "clsText:Private Sub txtArray_Change"
End Sub


Viele Grüße

Micha

Anzeige
Genial Micha, Danke, aber ....
06.02.2003 13:05:25
Anna
Hallo Micha,
funzt im Prinzip super, aber ich könnte nicht behaupten, dass ich jetzt mehr von Klassenmodulen verstehe. Ich denke da besteht noch Nachholbedarf.
z.B. verstehe ich schon deine Einleitung nicht: "TypeOf funzt bei mir nicht" ???
Was jetzt leider auch nicht mehr funktioniert, ist das Bezeichnungsfeld als Fehlermeldung zu mißbrauchen, hat mir aber sehr gut gefallen, die MsgBox muss ich ja immer erst wieder abklicken! Hast du da noch eine Idee oder was mach ich falsch.
Und zu guter Letzt hätte ich gerne noch, dass der Focus nach der Eingabe der 8 zulässigen Zeichen dann in das nächste Textfeld springt. Bitte hilf mir noch mal.
Ansonsten tausend Dank.
Liebe Grüße aus Würzburg
Anna
Anzeige
Re: Genial Micha, Danke, aber ....
06.02.2003 13:31:06
Michael Scheffler
Hallo Anna,

wenn Dur mir Deine Aufgabenstellung etwas näher erläutern würdest, ja.

Ich habe Dir nur ein Beispiel gegeben, was passiert, wenn man für einige Textboxen EIN Ereignis definiert. Hier ist die Frage nach numerischen Eingaben gegeben gewesen.

Poste mir mal den Code, auf den Du im ersten Posting verwiesen hast.

Viele Grüße aus DD

Micha

aktueller Code im Klassenmodul
06.02.2003 13:48:56
Anna
Hallo Micha,
wie gesagt, das Label als Fehlerausgabe zu benutzen finde ich super, würde ich gerne weiterverwenden und zum Schluß in die nächste Textbox springen. Danke für dein Engagement.

Private Sub txtArray_Change()
'On Error GoTo ErrHandler
With txtArray
Dim dteEingabe As Date
Dim iDay As Integer, iMonth As Integer, iYear As Integer
If .Text = "" Then Exit Sub
If Not IsNumeric(Right(.Text, 1)) Then
Beep
.SelStart = Len(.Text) - 1
.SelLength = 1
'lblFaelligkeit.Caption = "Nur Ziffern erlaubt!"
Exit Sub
Else
'lblFaelligkeit.Caption = ""
End If
iDay = CInt(Left(.Text, 2))
Select Case Len(.Text)
Case 0
Case 1
If iDay > 3 Then
Beep
.SelStart = 0
.SelLength = 1
.Caption = "Maximal 31 Tage"
Else
'lblFaelligkeit.Caption = ""
End If
Case 2
If iDay > 31 Then
Beep
.SelStart = 0
.SelLength = 2
'lblFaelligkeit.Caption = "Maximal 31 Tage"
Else
'lblFaelligkeit.Caption = ""
End If
Case 3
iMonth = CInt(Right(.Text, 1))
If iMonth > 1 Then
Beep
.SelStart = 2
.SelLength = 1
'lblFaelligkeit.Caption = "Maximal 12 Monate"
Else
'lblFaelligkeit.Caption = ""
End If
Case 4
iMonth = CInt(Right(.Text, 2))
If iMonth > 12 Then
Beep
.SelStart = 2
.SelLength = 2
'lblFaelligkeit.Caption = "Maximal 12 Monate"
Else
'lblFaelligkeit.Caption = ""
End If
Select Case iMonth
Case 2
If iDay > 29 Then
Beep
.SelStart = 0
.SelLength = 4
'lblFaelligkeit.Caption = "Maximal 29 Tage"
Else
'lblFaelligkeit.Caption = ""
End If
Case 4, 6, 9, 11
If iDay > 30 Then
Beep
.SelStart = 0
.SelLength = 4
'lblFaelligkeit.Caption = "Maximal 30 Tage"
Else
'lblFaelligkeit.Caption = ""
End If
End Select
Case 8
iMonth = CInt(Mid(.Text, 3, 2))
iYear = CInt(Right(.Text, 4))
If iYear Mod 4 > 0 And iMonth = 2 And iDay = 29 Then
Beep
.SelStart = 0
.SelLength = 8
'lblFaelligkeit.Caption = "Maximal 28 Tage"
Else
.Text = DateSerial(iYear, iMonth, iDay)
dteEingabe = DateSerial(iYear, iMonth, iDay)
'lblEingang.Caption = dteEingabe & vbLf & Format(dteEingabe, "dddd")
.SelStart = 0
.SelLength = Len(.Text)
End If
End Select
End With
Exit Sub

'ErrHandler:
'If InStr(1, Err.Source, ":") = 0 Then Err.Source = "clsText:Private Sub txtArray_Change"
End Sub

Liebe Grüße
Anna




Anzeige
Re: aktueller Code im Klassenmodul
06.02.2003 14:47:28
Michael Scheffler
Hallo,

Viele Grüße

Micha

Danke, wie komm ich noch in die nächst Textbox? oT
06.02.2003 15:09:08
Anna

Re: Danke, wie komm ich noch in die nächst Textbox? oT
06.02.2003 15:23:11
Michael Scheffler
Wie meisnt Du das? Ich natworte dann, muss erst mal los.

Gruß

Micha

Re: Danke, wie komm ich noch in die nächst Textbox? oT
06.02.2003 15:47:35
Anna
Danke Micha für deine Arbeit und Geduld,
ich möchte, nachdem die Eingabe in der aktuellen Textbox beendet und das Datum formatiert ist dass der Focus automatisch an die nächste Textbox abgegeben wirden, d.h. der Cursor soll jetzt in der nächsten Textbox stehen.
Liebe Grüße
Anna
Was hälst du von SendKeys "(Enter)", True ...
06.02.2003 17:35:58
Anna
Hallo Micha,
dank eigener Denkleistung [:-)] kam ich auf die Idee mit SendKeys "{ENTER}", True. Findest du das OK oder zu unprofessionell? So oder so, noch mal tausend Dank und hoffentlich bleibst du diesem Forum noch lange treu. Bis dann!
Liebe Grüße
Anna
Anzeige
Zum guten Schluß ...
06.02.2003 18:13:57
Anna
Hallo Micha,
perfekt wäre es jetzt, wenn die erste Textbox mit TTMMJJJ vorbelegt wäre und beim Sprung in die nächste Textbox sich diese dann mit TTMMJJJJ füllen würde!
Liebe Grüße
Anna
Zum guten Schluß ...?
06.02.2003 19:12:21
Michael Scheffler
Hallo Anna,

ich weiß nicht, warum soll der Nutzer nicht - wie üblich - mit dem Tabulator die Felder wechseln? Wenn Du die Aktivierreihenfolge richtif machst, dann klappt das doch wunderbar?

Das mit der Vorbelegung musst Du in die Initalize-Prozedur bringen.

Liebe Grüße

Micha

Danke dir, cu Anna o.T.
06.02.2003 19:58:53
Anna

Re: Danke dir, cu Anna o.T.
07.02.2003 11:20:53
Michael Scheffler
Hallo Anna,

wie hast Du es denn jetzt gelöst?

Gruß

Micha

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige