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.

VBA - Alle TextBoxen ansprechen
#1
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
Antworten Top
#2
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
(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)
Antworten Top
#4
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#5
(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?
Antworten Top
#6
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
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#7
(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?
Antworten Top
#8
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
Mit freundlichen Grüßen

Mitness 43
Antworten Top
#9
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
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#10
Super Ansätze, habe ich jetzt übernommen.

Passt! :)

Vielen Dank euch!
[-] Folgende(r) 1 Nutzer sagt Danke an Korain für diesen Beitrag:
  • Mitness
Antworten Top


Gehe zu:


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