Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Datum mehrfach prüfen
#11
Moin!
Woher die Daten (Plural von Datum) kommen, ist Excel (und der bedingten Formatierung) recht egal.
Du musst den Text einer Textbox mit IsDate() prüfen und ihn mit CDate() übergeben:

If IsDate(Textbox5) Then Range("X42") = CDate(Textbox5)
Ich persönlich verwende keine Userforms mehr, weil mir das "Gehampel" Text → Typ auf den Keks geht. Wink
Vielleicht lädst Du mal die aktuelle Datei hoch, dann schaue ich mal drüber.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#12
Der Quelltext basiert auf dieser Grundlage:


https://www.online-vba.de/vba_tutorialuserform_2.php

Ist ja leicht zu erkennen an meinen Fragen dass ich von programmieren soviel Ahnung habe wie der Hund vom reden. Ich kann mich zwar ausdrücken aber es ist schwer zu verstehen :P

Ich hab mich mittlerweile soweit eingearbeitet dass ich die Tabellen meinen wünschen entsprechend erweitern kann und das wird auch alles eingelesen und und und, mit der bedingten formstierung wollte ich dann die Datumseingabe noch farblich machen aber das klappt halt nicht. :( ich hab 10 Textboxen 3-9 sollen ein datum ausgeben das gemäß meiner ersten Farbe geprüft und dann farblich markiert werden soll.
Antworten Top
#13
(13.11.2022, 07:30)Milemer schrieb: Ich kann mich zwar ausdrücken aber es ist schwer zu verstehen :P

Habe ich schon bemerkt.  19

Stelle Dir mal kurz vor, dass der Motor Deines Autos unkontrolliert ausgeht.
Du rufst in der Werkstatt an.
Der Meister fragt Dich diverse Sachen, die Du alle verneinst.
Meister: "Bring die Kiste mal vorbei!"

Deine Antwort:
"Ich habe das Auto bei KIA Meierhuber gekauft!"
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#14
ja das hilft jetzt natürlich nur bedingt :D


Code:
Option Explicit
Option Compare Text
' ************************************************************************************************
' KONSTANTEN / PARAMETRISIERUNG
' ************************************************************************************************

'Wie viele TextBoxen sind auf der UserForm platziert?
Private Const iCONST_ANZAHL_EINGABEFELDER As Integer = 10

'In welcher Zeile starten die Eingaben?
Private Const lCONST_STARTZEILENNUMMER_DER_TABELLE As Long = 2


' ************************************************************************************************
' EREIGNISROUTINEN DER USERFORM
' ************************************************************************************************

'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub CommandButton1_Click()
     Call EINTRAG_ANLEGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
     Call EINTRAG_LOESCHEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()
     Call EINTRAG_SPEICHERN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Beenden Schaltfläche Ereignisroutine
Private Sub CommandButton4_Click()
     Unload Me
End Sub


Private Sub CommandButton_4_Click()

End Sub

Private Sub Label9_Click()

End Sub

'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
     Call EINTRAG_LADEN_UND_ANZEIGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub TextBox4_Change()

End Sub

Private Sub TextBox6_Change()

End Sub

'Diese Ereignisroutine wird beim Anzeigen der UserForm ausgeführt
Private Sub UserForm_Activate()
     If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 '1. Eintrag selektieren
End Sub

'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
     Call LISTE_LADEN_UND_INITIALISIEREN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub


' ************************************************************************************************
' VERARBEITUNGSROUTINEN
' ************************************************************************************************
'Textfeld als Datum formatieren und ausgeben

Private Sub TextBox4_AfterUpdate()
TextBox4 = Format(TextBox4, "dd.mm.yyyy")
End Sub


Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(TextBox4) Then Range("X42") = CDate(TextBox4)
If Not IsDate(TextBox4) Then
TextBox4 = ""
Cancel = True
End If
End Sub



'Diese Routine wird aufgerufen um die Liste (ListBox1) zu leeren, einzustellen und neu zu füllen
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
   Dim lZeile As Long
   Dim lZeileMaximum As Long
   Dim i As Integer
 
     'Alle TextBoxen leer machen
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Me.Controls("TextBox" & i) = ""
     Next i

     ListBox1.Clear 'Liste leeren
   
     '4 Spalten einrichten
     'Spalte 1: Zeilennummer des Datensatzes
     'Spalte 2: Name (Spalte A)
     'Spalte 3: Telefon (Spalte B)
     'Spalte 4: E-Mail (Spalte C)
     ListBox1.ColumnCount = 4
   
     'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
     '"<Breite Spalte 1>;<Breite Spalte 2>;<Breite Spalte 3>;<Breite Spalte 4>"
     ListBox1.ColumnWidths = "0;;;"
     'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
   
     'Um eine Schleife für alle Datensätze zu erhalten, benötigen wir die letzte verwendete Zeile
     lZeileMaximum = Tabelle2.UsedRange.Rows.Count 'Benutzer Bereich auslesen
   
     For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
       
         'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
         If IST_ZEILE_LEER(lZeile) = False Then
           
             'Spalte 1 der Liste mit der Zeilennummer füllen
             ListBox1.AddItem lZeile
           
             'Spalten 2 bis 4 der Liste füllen
             ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle2.Cells(lZeile, 1).Text)
             ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle2.Cells(lZeile, 2).Text)
             ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle2.Cells(lZeile, 3).Text)
       
         End If
       
     Next lZeile
   
End Sub

Private Sub EINTRAG_LADEN_UND_ANZEIGEN()
   Dim lZeile As Long
   Dim i As Integer
   
     'Eingabefelder resetten
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Me.Controls("TextBox" & i) = ""
     Next i
   
     'Nur wenn ein Eintrag selektiert/markiert ist
     If ListBox1.ListIndex >= 0 Then
           
         'Die Zeilennummer des Datensatzes steht in der ersten ausgeblendeten Spalte der Liste,
         'somit können wir direkt zugreifen.
         lZeile = ListBox1.List(ListBox1.ListIndex, 0)
       
         For i = 1 To iCONST_ANZAHL_EINGABEFELDER
             Me.Controls("TextBox" & i) = CStr(Tabelle2.Cells(lZeile, i).Text)
         Next i
           
     End If
   
End Sub

Private Sub EINTRAG_SPEICHERN()
  Dim lZeile As Long
  Dim i As Integer

     'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
     If ListBox1.ListIndex = -1 Then Exit Sub
   
     'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
     lZeile = ListBox1.List(ListBox1.ListIndex, 0)
   
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Tabelle2.Cells(lZeile, i) = Me.Controls("TextBox" & i)
     Next i
   
     'Der Benutzer könnte die angezeigten Werte in der Liste geändert haben,
     'daher aktualisieren wir den ausgewählten Eintrag entsprechend.
     ListBox1.List(ListBox1.ListIndex, 1) = TextBox1
     ListBox1.List(ListBox1.ListIndex, 2) = TextBox2
     ListBox1.List(ListBox1.ListIndex, 3) = TextBox3
   
End Sub

Private Sub EINTRAG_LOESCHEN()
  Dim lZeile As Long
 
     'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
     If ListBox1.ListIndex = -1 Then Exit Sub
 
     'Beim Löschen fragen wir zuerst den Benutzer noch einmal sicherheitshalber:
     If MsgBox("Sie möchten den markierten Datensatz wirklich löschen?", _
               vbQuestion + vbYesNo, "Sicherheitsabfrage!") = vbYes Then
 
         'Nur wenn er mit <JA> antwortet, löschen wir auch!
 
         'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
         lZeile = ListBox1.List(ListBox1.ListIndex, 0)
       
         'Die ganze Zeile wird nun gelöscht
         Tabelle2.Rows(CStr(lZeile & ":" & lZeile)).Delete
       
         'Und den Eintrag in der Liste müssen wir auch noch entfernen
         ListBox1.RemoveItem ListBox1.ListIndex
   
     End If
   
End Sub

Private Sub EINTRAG_ANLEGEN()
  Dim lZeile As Long
   
     lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE
     'Schleife bis eine leere ungebrauchte Zeile gefunden wird
     Do While IST_ZEILE_LEER(lZeile) = False
         lZeile = lZeile + 1 'Nächste Zeile bearbeiten
     Loop
   
     'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
     Tabelle2.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
   
     'Und neuen Eintrag in die UserForm eintragen
     ListBox1.AddItem lZeile
     ListBox1.List(ListBox1.ListCount - 1, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
     ListBox1.List(ListBox1.ListCount - 1, 2) = ""
     ListBox1.List(ListBox1.ListCount - 1, 3) = ""
   
     'Den neuen Eintrag markieren mit Hilfe des ListIndex
     ListBox1.ListIndex = ListBox1.ListCount - 1
     'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen
   
     'Und dem Benutzer direkt noch den Cursor in das erste Eingabefeld stellen und alles vorselektieren,
     'so kann der Benutzer direkt loslegen mit der Dateneingabe.
     TextBox1.SetFocus
     TextBox1.SelStart = 0
     TextBox1.SelLength = Len(TextBox1)
   
End Sub



' ************************************************************************************************
' HILFSFUNKTIONEN
' ************************************************************************************************

'Ermittelt, ob eine Zeile in Benutzung ist...
Private Function IST_ZEILE_LEER(ByVal lZeile As Long) As Boolean
   Dim i As Long
   Dim sTemp As String
 
     'Hilfsvariable initialisieren
     sTemp = ""
   
     'Um zu erkennen, ob eine Zeile komplett leer/ungebraucht ist
     'verketten wir einfach alle Spalteninhalte der Zeile miteinander.
     'Ist die zusammengesetzte Zeichenkette aller Spalten leer,
     'ist die Zeile nicht genutzt...
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         sTemp = sTemp & Trim(CStr(Tabelle2.Cells(lZeile, i).Text))
     Next i
   
     'Rückgabewert festlegen
     If Trim(sTemp) = "" Then
         'Die Zeile ist leer
         IST_ZEILE_LEER = True
     Else
         'Die Zeile ist mindestens in einer Spalte gefüllt
         IST_ZEILE_LEER = False
     End If
   







End Function


Spezifisch gefragt:

Private Sub TextBox4_AfterUpdate()

TextBox4 = Format(TextBox4, "dd.mm.yyyy")
End Sub


Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Not IsDate(TextBox4) Then
TextBox4 = ""
Cancel = True
If IsDate(TextBox4) Then Range("X42") = CDate(TextBox4)
End If
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste