Clever-Excel-Forum

Normale Version: VBA - Alle TextBoxen ansprechen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe in einer UserFrom ca. 50 TextBoxen in verschiedenen Multiseiten.
Ich habe teilweise Abfragen für die User, die die Textboxen zb. rot färben.

Mittels eines Buttons sollen aber alle Hintergründe der TextBoxen bereinigt werden (wieder weiß gefärbt werden).
Es dürfen aber nur die TextBoxen sein und keine Schaltflächen.
Die TextBoxen heißen: TextBox1, TextBox2,..., TextBoxn

Name der UserForm: UserForm2_de2

Meine Idee (die nicht klappt):
Code:
        For x = 1 To 50
            UserForm2_de2.Controls("TextBox" & x).BackColor = RGB(255, 255, 255)
        Next x
Hallo Korain,

die Farbzuweisungen bei UserForm-Objekten sind etwas anders. Versuche es mal so:

        
Code:
For x = 1 To 50
            Controls("TextBox" & x).BackColor = &H80000005
        Next x


Hinweis: da sich die Anweisung im Modul des UserForm befindet (befinden sollte), braucht darauf nicht referenziert werden.
(14.12.2021, 14:06)Klaus-Dieter schrieb: [ -> ]Hallo Korain,

die Farbzuweisungen bei UserForm-Objekten sind etwas anders. Versuche es mal so:

        
Code:
        For x = 1 To 50
            Controls("TextBox" & x).BackColor = &H80000005
        Next x


Hinweis: da sich die Anweisung im Modul des UserForm befindet (befinden sollte), braucht darauf nicht referenziert werden.

Hallo Klaus-Dieter,

bekomme nach wie vor eine Fehlermeldung:
"Das angegebene Objekt konnte nicht gefunden werden"

Färbe die TexBoxen so ein (klappt auch wie gewünscht):
Code:
TextBox10.BackColor = RGB(230, 184, 183)
Hallo,

dann gibt es mindesten eine der Textboxen nicht.

Hallo,


Zitat:Färbe die TexBoxen so ein (klappt auch wie gewünscht):

Code:

Code:
TextBox10.BackColor = RGB(230, 184, 183)



OK, habe ich noch nie versucht, allerdings arbeite ich auch nicht mit RGB.
(14.12.2021, 14:13)Klaus-Dieter schrieb: [ -> ]Hallo,

dann gibt es mindesten eine der Textboxen nicht.

Hallo,





OK, habe ich noch nie versucht, allerdings arbeite ich auch nicht mit RGB.

Stimmt, habe die Stichprobe gemacht, sonst funktioniert es.

Gibt es eine Möglichkeit nicht vorhandene TextBoxen zu überspringen?
Hallo Korain,

ja, versuche es mal so:


Code:
For x = 1 To 50
            If x = 12 Then x = 13
            Controls("TextBox" & x).BackColor = &H80000005
        Next x
(14.12.2021, 14:23)Klaus-Dieter schrieb: [ -> ]Hallo Korain,

ja, versuche es mal so:


Code:
        For x = 1 To 50
            If x = 12 Then x = 13
            Controls("TextBox" & x).BackColor = &H80000005
        Next x

Hallo Klaus-Dieter,

damit würde ich ja nur ausschließen, dass nur eine TextBox nicht vorhanden ist richtig?
Funktioniert leider nicht, sprich es kann auch mal vorkommen, dass 2 oder mehr nicht existieren.

Gibt es auch eine Möglichkeit grundsätzlich abzufragen, ob die TextBox existiert.
Sprich:
Code:
        For x = 1 To 50
            If 'Controls("TextBox" & x) = Exist Then
                 Controls("TextBox" & x).BackColor = &H80000005
            End If
        Next x

LG Korain

@Klaus-Dieter

Habe es jetzt wie folgt gelöst:
Code:
        For x = 1 To 50
            Controls("TextBox" & x).BackColor = RGB(255, 255, 255)
            On Error Resume Next
        Next x

Denke mit dem "On Error Resume Next" ist nicht die sauberste Lösung aber passt denke ich. Habe ich Stichprobenartig erfolgreich getestet.

Oder würdest du sagen, dass die Lösung nicht gut ist?
Hallo Korain,

versuchs Mal so:

Code:
Private Sub all_tb()
Dim tb As Object

For Each tb In UserForm2_de2.Controls
If TypeName(tb) = "TextBox" Then tb.BackColor = RGB(255, 255, 255)
Next tb

End Sub
Hallo Korain,

bei meinen UserForms kommt das nicht (mehr) vor. So etwas löse ich meistens über ein Array mit den Nummern der vorhandenen Objekte. Das würde etwas so aussehen:

Code:
Private Sub UserForm_Click()
    Dim varNrArr As Variant
    Dim intAnz As Integer
        varNrArr = Array(1, 2, 4, 6, 8, 10, 12, 14) ' hier stehen die Nummern der Objekte die es wirklich gibt
            For intAnz = 0 To 7
                 Controls("TextBox" & varNrArr(intAnz)).BackColor = &H80000005
            Next intAnz
End Sub
Super Ansätze, habe ich jetzt übernommen.

Passt! :)

Vielen Dank euch!