Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1748to1752
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
VBA Bedingung Anzeige Textfelder
07.04.2020 16:33:30
Christian
Hallo,
ich habe mir eine Stundentabelle erstellt und diese so gestaltet, dass alle Felder in der UserForm ausgefüllt sein müssen, bevor die Daten in eine Tabelle übernommen werden. Jetzt stoße ich allerdings an meine Grenzen und für mich wird es zu kompliziert. Daher benötige ich Hilfe.
Folgendes soll noch eingearbeitet werden: Wenn in der ComboBox1, die Einträge "Urlaub, Feiertag oder Krank" ausgewählt werden, dann soll TextFeld2 und TextFeld3 ausgeblendet werden. Dann soll naturlich auch nicht der Hinweis erscheinen "Es wurden nicht alle Textfelder ausgefüllt." und die Daten sollen ohne Befüllen dieser zwei Felder in die Tabelle übernommen werden. TextFeld1 und die ComboBox1 müssen aber trotzdem beide befüllt werden, sonst soll wieder der Hinweis kommen "Es wurden nicht alle Textfelder ausgefüllt."
Ich hoffe, dass ich es einigermaßen verständlich beschreiben konnte und bin über jede Hilfe von Euch sehr dankbar.
Private Sub ComboBox1_Change()
End Sub

Private Sub CommandButton1_Click()
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Or (TypeName(objtxt) = "ComboBox") Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
Next
Dim erste_freie_Zeile As Integer
ActiveSheet.Unprotect Password:=""
erste_freie_Zeile = Sheets("Stundennachweis").Range("A65536").End(xlUp).Offset(1, 0).Row
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 1) = CDate(TextBox1.Text)
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 2) = Format(TextBox2.Text, "hh:mm")
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 3) = Format(TextBox3.Text, "hh:mm")
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 4) = ComboBox1.Text
Unload Me
ActiveSheet.Protect Password:=""
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()
End Sub

Private Sub TextBox2_Change()
End Sub

Private Sub TextBox3_Change()
End Sub

Private Sub UserForm_Initialize()
Dim Wiederholungen As Integer
For Wiederholungen = 2 To Sheets("Hilfstabelle").Range("A65536").End(xlUp).Row
ComboBox1.AddItem Sheets("Hilfstabelle").Cells(Wiederholungen, 1)
Next
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 18:16:32
Regina
Hi, ungetestet:
Private Sub ComboBox1_Change()
If ComboBox1 = "Urlaub" or ComboBox1="Krank" or ComboBox1 ="Feiertag" then
TextBox2.Visible = False
TextBox3.Visible = False
Else
TextBox2.Visible = True
TextBox3.Visible = True
End if
End Sub
Hier die Prüfung (nicht sehr elegant und ebenfalls ungetestet):
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Or (TypeName(objtxt) = "ComboBox") Then
' Spezialfälle behandeln
If Combobox1  "Urlaub" And Combobox1  "Krank" And Combobox1  "Feiertag" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
Else
If objtxt.Name  "TextBox2" And objtxt.Name  "TextBox3" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
End If
End If
Next
Wenn das so nicht passt, lade bitte einmal eine Beispielmappe hoch.
Gruß Regina
Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 19:05:08
Christian
Hallo Regina,
vielen Vielen Dank, die Lösung funktioniert super. Ich hätte noch eine andere Frage, kann man eingeben, dass das Datum und die Uhrzeit in der UserForm nur in einem bestimmenten Format eingegeben werden kann (Datum TT.MM.JJJJ und Zeit hh:mm)? Das habe ich auch nicht hin bekommen.
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 19:33:40
Regina
Hi, es gibt für Textfelder im UserForm keine direkte Format-Einstellung für Datum oder Text. Du müsstest nach der Eingabe prüfen. Dafü könntest Du zum Beispiel das Exit-Ereignis eines Textfeldes nutzen. Wenn Du das korrekte Datumsformat prüfen möchtest, könntest Du so vorgehen:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not (TextBox1 Like "?.?.?" And IsNumeric(TextBox1)) Then
TextBox1.SetFocus
MsgBox "Eingabe in Textbox ist Falsch"
Exit Sub
End If
End Sub
Gruß Regina
Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 19:55:48
Christian
Hallo Regina,
jetzt ist es fast perfekt nur soll bei der falschen Eingabe auf das Feld wieder zurück gesprungen werden, bis es im richtigen Format eingebeben wurde. Wenn das noch möchglich ist wäre ich mehr als glücklich.
Ich bedanke mich aber jetz schon mal für diese perfekte Unterstützung. Leider reicht mein VBA Wissen für solche Anforderungen nicht aus und ich finde es toll, wenn man hier so eine super Hilfe bekommt.
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 20:02:49
Regina
Hi, dann füge vor dem Exit Sub ein
Cancel = true
ein.
Gruß Regina
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 20:28:59
Christian
Nochmal Tausend Dank für die tolle Unterstützung, jetzt passt alles perfekt.
Liebe Grüße Christian
Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 20:43:35
Regina
prima, vielen Dank für die Rückmeldung!
Gruß Regina
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 21:23:12
Christian
jetzt habe ich nochmal ein kleines Problem, welches ich beim Fertigstellen festgestellt habe.
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not (TextBox2 Like "?:?" And IsNumeric(TextBox2)) Then
TextBox2.SetFocus
MsgBox "Zeit Format ist Falsch"
Cancel = True
Exit Sub
End If
End Sub
hierbei zeigt es immer an: Format falsch. Habe das nur ins Zeitformat abgeändert, aber da muss sicher noch etwas anderes geändert werden.
dies war das für das Datum und das funktioniert tadellos:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not (TextBox1 Like "?.?.?" And IsNumeric(TextBox1)) Then
TextBox1.SetFocus
MsgBox "Datums Format ist Falsch"
Cancel = True
Exit Sub
End If
End Sub

Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 21:35:02
Regina
... sorry, bei der Uhrzeitprüfung muss das "IsNumeric" raus:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not TextBox2 Like "?:?" Then
TextBox2.SetFocus
MsgBox "Zeit Format ist Falsch"
Cancel = True
Exit Sub
End If
End Sub
Gruß Regina
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 21:40:22
Christian
nochmal vielen vielen Dank, jetzt funktioniert es.
Liebe Grüße Christian
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 22:06:26
Christian
https://www.herber.de/bbs/user/136510.xlsm
Mist, passt doch etwas noch nicht, wenn man nun bei der UserForm auf Abbruch geht, übernimmt er keinen Abbruch. Habe die Datei mal hochgeladen.
Anzeige
AW: VBA Bedingung Anzeige Textfelder
07.04.2020 22:24:01
Regina
...ok, dann nicht das Exit, sondern das AfterUpdate-Ereignis.
Ändere alle Exit-Ereignisse os ab:
Private Sub TextBox1_AfterUpdate()
If Not (TextBox1 Like "?.?.?" And IsNumeric(TextBox1)) Then
TextBox1.SetFocus
MsgBox "Datumformat ist falsch eingegeben, bitte korregieren!"
Cancel = True
Exit Sub
End If
End Sub
gruß Regina
AW: VBA Bedingung Anzeige Textfelder
08.04.2020 07:50:38
Regina
Hallo Christian, der gepostete Code haut auch nicht hin:
Egal wie man prüft, es wird immer geprüft, bevor das Unload erfolgt und dann kommt die Fehlermeldung.
Die einzoge Lösung, die mir einfällt:
Prüfe nicht beim Verlassen oder Updaten der Textboxen, sondern bringe das Prüfen in dem Button unter, mit dem die Daten in das Tabellenblatt geschrieben werden.
Private Sub CommandButton1_Click()
Dim objtxt As Object
If Not (TextBox1 Like "?.?.?" And IsNumeric(TextBox1)) Then
TextBox1.SetFocus
MsgBox "Datumformat ist falsch eingegeben, bitte korregieren!"
Exit Sub
End If
If Not TextBox2 Like "?:?" Then
TextBox2.SetFocus
MsgBox "Zeitformat ist falsch eingegeben, bitte korregieren!"
Exit Sub
End If
If Not TextBox3 Like "?:?" Then
TextBox3.SetFocus
MsgBox "Zeitformat ist falsch eingegeben, bitte korregieren!"
Exit Sub
End If
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Or (TypeName(objtxt) = "ComboBox") Then
' Spezialfälle behandeln
If ComboBox1  "Urlaub" And ComboBox1  "Krank" And ComboBox1  "Feiertag" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
Else
If objtxt.Name  "TextBox2" And objtxt.Name  "TextBox3" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
End If
End If
Next
Dim erste_freie_Zeile As Integer
ActiveSheet.Unprotect Password:="LV"
erste_freie_Zeile = Sheets("Stundennachweis").Range("A65536").End(xlUp).Offset(1, 0).Row
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 1) = CDate(TextBox1.Text)
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 2) = Format(TextBox2.Text, "hh:mm")
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 3) = Format(TextBox3.Text, "hh:mm")
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 4) = ComboBox1.Text
Unload Me
ActiveSheet.Protect Password:="LV"
End Sub
Gruß Regina
Anzeige
AW: VBA Bedingung Anzeige Textfelder
08.04.2020 23:21:28
Christian
Hallo Regina,
habe das alles eingearbeitet und jetzt funktioniert es super. Beim durchtesten habe ich noch einen kleinen Fehler gefunden. Wenn man beim Datum z.B. 02.02.200 eingibt, läuft es auf Laufzeitfehler. Ist sicher nur eine Kleinigkeit aber ich komme einfach nicht dahinter. Ich lade die Datei nochmal hoch und hoffe nochmal auf Hilfe.
https://www.herber.de/bbs/user/136549.xlsm
Gruß Christian
AW: VBA Bedingung Anzeige Textfelder
09.04.2020 07:29:35
Pierre
Hallo Christian,
vielleicht nicht die eleganteste Lösung, aber probier mal:
folgende Zeile im Code ersetzen:
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 1) = CDate(TextBox1.Text)

durch:
Sheets("Stundennachweis").Cells(erste_freie_Zeile, 1) = Format(TextBox1.Text, "DD.MM.YYYY")

Das sorgt dafür, dass kein Fehler mehr erscheint (zumindest bei mir), aber trotzdem das passende Format verwendet werden muss.
Und zusätzlich folgenden Block zwischen die "If Not TextBox1" und "If Not TextBox2" einfügen:
  If Len(TextBox1.Value) 

Hierbei musst du aber beachten, dass das Datum zukünftig immer vollständig eingetragen werden muss, also z. B. auch 01.05.2020, ansonsten kommt die Fehlermeldung. So kannst du aber zumindest umgehen, dass bei der Jahreszahl eine Ziffer vergessen wird.
Und noch eine Bitte: Rechtschreibung mal kontrollieren ;) korrigieren und in der letzten MsgBox ganz am Ende der Punkt ist zu viel.
Gruß Pierre
Anzeige
AW: VBA Bedingung Anzeige Textfelder
09.04.2020 11:16:54
Christian
Hallo Pierre,
der Code funktioniert jetzt super. Auch danke für den anderen Hinweis, man liest es selbst und übersieht dabei immer wieder den gleichen Fehler.
Nochmal Danke für die Unterstützung.
Gruß Christian
AW: VBA Bedingung Anzeige Textfelder
09.04.2020 14:52:02
Pierre
Sorry, ich komme erst jetzt zum Antworten...
Bitteschön, ja das kenne ich mit den Fehlern.
Irgendwann ist man blind ;)
Sollte natürlich auch keine Kritik sein, aber ich denke, gerade wenn andere mit der Datei arbeiten, ist es schöner, wenn keine grammatikalischen Fehler vorhanden sind.
Noch eins, falls du das hier noch lesen solltest: es heißt DatumSformat :)
Gruß Pierre
Anzeige
AW: VBA Bedingung Anzeige Textfelder
09.04.2020 17:12:26
Christian
Nochmal Danke.
Das Datumsformat war mir beim korrigieren des anderen Fehlers auch schon aufgefallen und ich hatte es bereits geändert. Trotzdem Danke für den Hinweis, manchmal ist man echt blind.
Gruß Christian

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige