Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
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
Inhaltsverzeichnis

Erste leere TextBox einer Userform erm.

Erste leere TextBox einer Userform erm.
07.10.2021 15:54:17
Herbert
Moin,
ist es möglich,
mir die nächste TextBox,
die keinen Inhalt hat in einer Messagebox auszugeben.
Erklärt:

1. TxtBox = "Hallo Welt"
2. TxtBox = "Dreh dich"
3. TxtBox = ""
Jetzt soll mir in einer Messagebox ausgegeben werden,
das die 3. Textbox leer ist,
am besten mit diesem Satz in der MsgBox:
"Die nächste freie TextBox ist: #TextBox-Bezeichnung#"

Ich bin jedem Dankbar,
der mir hilft.
MfG
Herbert

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erste leere TextBox einer Userform erm.
07.10.2021 16:07:09
ChrisL
Hi Herbert
Vorausgesetzt die TextBoxen sind in der Bezeichnung durchnummeriert (ansonsten wird es schwierig die richtige Reihenfolge zu bestimmen):
SetFocus wäre ein hübsches Zusatz-Feature.

Dim i As Integer
For i = 1 To 3
If UserForm1.Controls("TextBox" & i) = "" Then
MsgBox "Die nächste freie TextBox ist: TextBox" & i
UserForm1.Controls("TextBox" & i).SetFocus
Exit For
End If
Next i
cu
Chris
AW: funktioniert nicht
07.10.2021 16:23:11
Herbert
Moin,
danke für dein Antwort und
ich habe den Code mal soweit angepasst,
wie ich dachte das es möglich sei.
Mein jetziger Code:

Dim i As Integer
For i = 1 To 3
If TKonten_Userform.Controls("txtbx_Bezeichnung" & i) = "" Then
MsgBox "Die nächste freie TextBox ist: txtbx_Bezeichnung" & i
TKonten_Userform.Controls("txtbx_Bezeichnung" & i).SetFocus
Exit For
End If
Next i
Aber jetzt bekomme ich immer den Fehler: "Laufzeitfehler '-2147024809 (80070057)' Das angegebene Objekt konnte nicht gefunden werden."
Die Namen meiner Textboxen sind Einheitlich immer mit einer höheren Zahl:
- txtbx_Bezeichnung
- txtbx_Bezeichnung2
- txtbx_Bezeichnung3
- txtbx_Bezeichnung4
- txtbx_Bezeichnung5
- txtbx_Bezeichnung6
MfG
Herbert
Anzeige
AW: funktioniert nicht
07.10.2021 16:40:27
Daniel
Naja du musst auch die Textboxnamen entsprechend anpassen, wenn das mit so einer Zählschleife gehen soll, also die erste Textbox muss dann auch "txtbx_Bezeichnung1" heißen, dh alle Textboxen müssen eine Nummer haben.
Außerdem musst du den Schleifenendwert an die Anzahl der Textboxen anpassen:

for i = 1 to 6
Es gibt aber noch eine andere Möglichkeit, wenn du die Textboxen bzw deren Benennung nicht durchnumnerieren willst, sondern vielleicht sprechender Namen verwenden möchtest wie "Textboxen_Name" statt "Textbox1"

For each bez in Array("Bezeichnung1", "Bezeichnung2", "Bezeichnung3") 'hier alle Bezeichnungen listen
If TKonten_Userform.Controls("txtbx_" & bez).value = "" then
MsgBox "Die nächste freie TextBox ist: " & bez
TKonten_Userform.Controls("txtbx_Bezeichnung" & i).SetFocus
Exit For
End If
Next
Du musst hier zwar alle Boxen im Array auflisten, dafür bist du beim Textboxnamen nicht an die Nummerierung gebunden sondern kannst diese frei wählen, ebenso die Reihenfolge über die Anordnung im Array.
Gruß Daniel
Anzeige
AW: funktioniert immernoch nicht
07.10.2021 16:53:50
Herbert
Moin Daniel,
ich habe versucht deine Variante zu benutzen,
aber er sagt mir immer,
dass das For ohne Next ist,
dabei steht das Next doch unter If-Abfrage?
Hinweis:
Die Daten habe ich soweit angepasst.
Mein Code jetzt:

Private Sub CommandButton1_Click()
For i = 1 To 6
For Each bez In Array("Bezeichnung1", "Bezeichnung2", "Bezeichnung3", "Bezeichnung4", "Bezeichnung5", "Bezeichnung6") 'hier alle Bezeichnungen listen
If TKonten_Userform.Controls("txtbx_" & bez).Value = "" Then
MsgBox "Die nächste freie TextBox ist: " & bez
TKonten_Userform.Controls("txtbx_Bezeichnung" & i).SetFocus
Exit For
End If
Next
End Sub
MfG
Herbert
Anzeige
AW: funktioniert immernoch nicht
07.10.2021 17:01:54
Daniel
Die Schleife "For i = 1 to 6" brauchst du nicht mehr, du hast doch die Schleife über die tatsächlichen Namen.
Gruß Daniel
AW: Erste leere TextBox einer Userform erm.
07.10.2021 16:23:40
Werner
Hallo,
und wenn die Textboxen umbenannt wurden dann:

Private Sub CommandButton1_Click()
Dim ctrText As Control, loZähler As Long, boLeer As Boolean
loZähler = 1
For Each ctrText In Me.Controls
If LCase(TypeName(ctrText)) = "textbox" Then
If ctrText = "" Then
boLeer = True
strName = ctrText.Name
Exit For
End If
End If
Next ctrText
If boLeer Then
MsgBox "Die Textbox " & ctrText.Name & " ist leer."
Me.Controls(strName).SetFocus
Else
MsgBox "Es sind alle Textboxen gefüllt."
End If
End Sub
Gruß Werner
Gruß Werner
Anzeige
AW: Danke, aber...
07.10.2021 16:32:41
Herbert
Moin Werner,
danke für deine Antwort.
An sich ist dein Code genau das was ich gebraucht habe,
nur habe ich noch hinter der TextBox Bezeichnung immer noch zwei weiter Textboxen die so heißen: "txtbox_AB" & "txtbox_SB",
diese werden nach unten hin immer mit der gleichen Zahl wie die TextBox Bezeichnung nummeriert,
als Beispiel: txtbox_Bezeichnung2, txtbox_AB2, txtbox_SB2 .
Kann ich die beiden Textboxen(txtbox_AB;txtbox_SB[alle beide gibt es insg. 6mal]) aus der überprüfung raushalten?
MfG
Herbert
AW: Danke, aber...
07.10.2021 16:48:10
Werner
Hallo,
so:

Private Sub CommandButton1_Click()
Dim ctrText As Control, boLeer As Boolean
For Each ctrText In Me.Controls
If LCase(TypeName(ctrText)) = "textbox" Then
If ctrText.Name Like "txtbox_AB*" Or ctrText.Name Like "txtbox_SB*" Then
'nix machen
Else
If ctrText = "" Then
boLeer = True
strName = ctrText.Name
Exit For
End If
End If
End If
Next ctrText
If boLeer Then
MsgBox "Die Textbox " & ctrText.Name & " ist leer."
Me.Controls(strName).SetFocus
Else
MsgBox "Es sind alle Textboxen gefüllt."
End If
End Sub
Gruß Werner
Anzeige
loZähler ist...
07.10.2021 16:26:13
Werner
Hallo,
...überflüssig. Das war vom vorherigen Versuch noch drin.

Private Sub CommandButton1_Click()
Dim ctrText As Control, boLeer As Boolean
For Each ctrText In Me.Controls
If LCase(TypeName(ctrText)) = "textbox" Then
If ctrText = "" Then
boLeer = True
strName = ctrText.Name
Exit For
End If
End If
Next ctrText
If boLeer Then
MsgBox "Die Textbox " & ctrText.Name & " ist leer."
Me.Controls(strName).SetFocus
Else
MsgBox "Es sind alle Textboxen gefüllt."
End If
End Sub
Gruß Werner
AW: Deine Verbessrung hab ich übernommen
07.10.2021 16:34:32
Herbert
Perfekt,
danke für die ausbesserung,
hätte aber trzd. gut funktioniert.
Wie auch nicht anders zu erwarten bei einem Genie wie dir.
MfG
Herbert
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige