Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1356to1360
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
Prüfung für 24 Textboxen vereinfachen
02.05.2014 20:21:09
Buttermilch
Hallo,
ich habe eine Userform in der 24 Textboxen sind. Diese sollen nur mit Datumswerten gefüllt werden. Das ganze jetzt aber für 24 Textboxen zuschreiben ist etwas aufwendig... Daher meine Frage ob ihr eine Möglichkeit kennt wie es einfacher geht :)
Die Textboxen schreiben die Werte einem in den Bereich D3:E8 und G3:H8, ich glaub das macht es nicht einfacher :/
Freue mich über jede Hilfe!!!
Danke und Gruß
Private Sub CommandButton1_Click()
If Not TextBox1 = "" Then
If IsDate(TextBox1) = True Then
Sheets("Verweis_1").Range("D3") = CDate(TextBox1.Value)
Else
TextBox1.BackColor = vbRed
End If
Else
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Prüfung für 24 Textboxen vereinfachen
02.05.2014 21:17:43
Uwe
Hallo Buttermilch,
Private Sub CommandButton1_Click()
Dim ObCb As Object
For Each ObCb In Me.Controls
If TypeName(ObCb) = "TextBox" And ObCb.Value = "" Then
ObCb.BackColor = vbRed
End If
Next ObCb
End Sub
als Ansatz.
Grüße aus Dresden
Uwe

AW: Prüfung für 24 Textboxen vereinfachen
02.05.2014 21:27:30
Tino
Hallo,
die TextBoxen müssen von TextBox1 bis TextBox24 in der richtigen Reihenfolge benannt sein.
Bei Cells() weiß ich nicht ob Zeilen oder Spaltenweise eintragen, hier mal nach Zeilen!
Private Sub CommandButton1_Click()
Dim n&
For n = 1 To 24
With Me("TextBox" & n)
If .Value  "" Then
If IsDate(.Value) Then
Sheets("Verweis_1").Cells(2 + n, 4).Value = CDate(.Value)
Else
.BackColor = vbRed
End If
Else
End With
End If
Next n
End Sub
Gruß Tino

Anzeige
AW: Prüfung für 24 Textboxen vereinfachen
02.05.2014 22:06:21
Tino
Hallo,
hier noch für die zwei Zellbereiche.
Private Sub CommandButton1_Click()
Dim n&, rng As Range, nRow&, nCol&
nRow = 1
Set rng = Sheets("Verweis_1").Range("D3:E8")
For n = 1 To 24
If n = 13 Then Set rng = Sheets("Verweis_1").Range("G3:H8"): nRow = 1
nCol = (n - 1) Mod 2 + 1
With Me("TextBox" & n)
If .Value  "" Then
If IsDate(.Value) Then
rng.Cells(nRow, nCol) = CDate(.Value)
Else
.BackColor = vbRed
End If
Else
End With
nRow = nRow + nCol - 1
Next n
End Sub
Gruß Tino

getestet ...
02.05.2014 22:56:00
Tino
Hallo,
den Code habe ich ohne zu testen geschrieben, war wohl noch ein Fehler im IF Bereich.
Hier jetzt getestet:
Private Sub CommandButton1_Click()
Dim n&, rng As Range, nRow&, nCol&

nRow = 1
Set rng = Sheets("Verweis_1").Range("D3:E8")
For n = 1 To 24
    If n = 13 Then Set rng = Sheets("Verweis_1").Range("G3:H8"): nRow = 1
    nCol = (n - 1) Mod 2 + 1
    With Me("TextBox" & n)
        If .Value <> "" Then
            If IsDate(.Value) Then
                 rng.Cells(nRow, nCol) = CDate(.Value)
            Else
                .BackColor = vbRed
            End If
        End If
    End With
    nRow = nRow + nCol - 1
Next n
End Sub
Gruß Tino

Anzeige
ich benutze da immer ein separates Frame ...
02.05.2014 21:29:26
Matthias
Hallo
Pack nur diese 24 Textbox-Objekte in ein separates Frame
Dann kannst Du mit ner Schleife die Controls ansprechen
und entsprechend des Rückgabewertes reagieren.
Hier mal wie ich das meine:
Userbild
Option Explicit
Private Sub CommandButton1_Click()
Dim ctrl As Control
For Each ctrl In Frame1.Controls
If IsDate(ctrl) = True Then
ctrl.BackColor = vbGreen
Else
ctrl.BackColor = vbRed
End If
Next
End Sub
Hier mal die Datei zu spielen ;-)
https://www.herber.de/bbs/user/90444.xlsm
Gruß Matthias
auch aus Dresden :o)

Anzeige
AW: ich benutze da immer ein separates Frame ...
02.05.2014 21:54:37
Marc
Abend zsm,
danke schon mal für euere bemühung!! Aber wenn ich versuche das anzupassen gehts net... Typen unverträglich. Mit For n = 1 to 24 habe ich auch schon versucht kommt aber auch Typen unverträglich.
Hier mal der ganzer Code mit Matthias seinem Stück
Dim ctrl As Control
For Each ctrl In Frame1.Controls
If IsDate(ctrl) = True Then
With Sheets("Verweis_1")
.Range("D3") = CDate(TextBox1.Value)
.Range("E3") = CDate(TextBox2.Value)
.Range("D4") = CDate(TextBox3.Value)
.Range("E4") = CDate(TextBox4.Value)
.Range("D5") = CDate(TextBox5.Value)
.Range("E5") = CDate(TextBox6.Value)
.Range("D6") = CDate(TextBox7.Value)
.Range("E6") = CDate(TextBox8.Value)
.Range("D7") = CDate(TextBox9.Value)
.Range("E7") = CDate(TextBox10.Value)
.Range("D8") = CDate(TextBox11.Value)
.Range("E8") = CDate(TextBox12.Value)
.Range("G3") = CDate(TextBox13.Value)
.Range("H3") = CDate(TextBox14.Value)
.Range("G4") = CDate(TextBox15.Value)
.Range("H4") = CDate(TextBox16.Value)
.Range("G5") = CDate(TextBox17.Value)
.Range("H5") = CDate(TextBox18.Value)
.Range("G6") = CDate(TextBox19.Value)
.Range("H6") = CDate(TextBox20.Value)
.Range("G7") = CDate(TextBox21.Value)
.Range("H7") = CDate(TextBox22.Value)
.Range("G8") = CDate(TextBox23.Value)
.Range("H8") = CDate(TextBox24.Value)
End With
Else
ctrl.BackColor = vbRed
End If
Next
End Sub
Ps.: ich komm aus Bawü :)

Anzeige
oder so ...
02.05.2014 22:03:39
Matthias
Hallo
Userbild
Gruß Matthias

AW: oder so ...
02.05.2014 22:07:13
Marc
Ajo klar... und dann kann ich deine Prüfung einbauen ne? das ich da nichr drauf gekommen... ärgerlich :/
Danke, werds morgen versuchen und berichten!

AW: oder so ...
02.05.2014 22:17:23
Marc
Okay habs mal kurz angetestet :D
Ich hab in dem Frame auch 2 Labels die werden jetzt auch Rot :/
und wenn ich zb ne 70 in ne Textbox schreibe wird es in ein Datum umgewandelt zb 10.03.1900
so wollte ich das nicht. Wollte eher das dann da noch ne Msgbox kommt mit: Bitte im Format TT.MM.JJJJ eingeben
Aber wir nähern uns :D

Anzeige
Du musst schon richtig lesen !
02.05.2014 22:37:09
Matthias
Hallo
Zitat:
Ich hab in dem Frame auch 2 Labels die werden jetzt auch Rot :/
Ich hatte ja geschrieben:
Pack nur diese 24 Textbox-Objekte in ein separates Frame.
Da haben dann keine anderen Objekte was zu suchen. Die Labels platzierst Du ausserhalb vom Frame.
oder Du machst es eben wie andere es vorgeschlagen haben
z.B Uwe mit TypeName prüfen ob es eine Textbox ist
oder Du benutzt Tinos Vorschlag
Oder Du formatierst die ControlSource-Zellen als Textformat.
Dann steht halt Text drin und keine Datum.
Wenn Du 10 eingibst steht auch 10 in der Zelle
Gruß Matthias

Anzeige
AW: Du musst schon richtig lesen !
02.05.2014 22:45:23
Uwe
Hi Marc,
Matthias hat Recht... lesen ist wichtig.
Hab meinen Vorschlag nochmal etwas modifiziert aber nicht getestet.
probier einfach. Vorschläge haste ja nun genug.
Private Sub CommandButton1_Click()
Dim ObCb As Object
For Each ObCb In Me.Controls
If TypeName(ObCb) = "TextBox" Then
If Not IsDate(ObCb) Then
ObCb.BackColor = vbRed
Else
ObCb.BackColor = vbGreen
End If
End If
Next
For Each ObCb In Me.Controls
If TypeName(ObCb) = "TextBox" Then
If ObCb.BackColor = vbRed Then
MsgBox "Datum prüfen"
Exit Sub
End If
End If
Next
' ab hier dein restlicher Code
End Sub

Grüße aus Dresden
Uwe

Anzeige
jetzt hast Du aber an mich gepostet ;-) owT
02.05.2014 22:57:11
Matthias

jetzt wo du es sagst...
02.05.2014 23:02:02
Uwe
seh ich es auch. Ist aber hoffentlich trotzdem klar, dass das nach Bawü ging, hoffe ich. ;-)
Grüße aus Briesnitz
Uwe

keine Ahnung ob er das liest ... owT
02.05.2014 23:04:32
Matthias

AW: Prüfung für 24 Textboxen vereinfachen
03.05.2014 11:07:17
Marc
Guten Morgen mal nach ganz Deutschland :P,
also Dank an alle für euere Hilfe, hab aus den vielen Eindrucken jetzt ne Lösungen zusammengebastelt die auch soweit läuft.
Noch mal Danke für euere Hilfe!!
schönes WE wünsch ich euch!!
Private Sub CommandButton1_Click()
For i = 1 To 24
If Not Controls("Textbox" & i) = "" Then
If IsDate(Controls("Textbox" & i)) = True Then
If CDate(Controls("Textbox" & i).Value)  CDate(Worksheets("Verweis_1").Range("A26").Value) Then
Controls("Textbox" & i).BackColor = vbRed
MsgBox "Bitte prüfen Sie ihre Eingabe." & vbCrLf & "" & vbCrLf & "Datum liegt außerhalb vom  _
Kalenderbereich" & vbCrLf & "" & vbCrLf & "", vbOKOnly + vbExclamation
Exit Sub
Else
Controls("Textbox" & i).BackColor = vbWhite
End If
Else
Controls("Textbox" & i).BackColor = vbRed
MsgBox "Bitte geben Sie das Datum im Format 'TT.MM.JJJJ' ein.", vbOKOnly + vbExclamation
Controls("Textbox" & i) = ""
Exit Sub
End If
Else
Unload Me
End If
Next
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige