Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: Jonny am Juli 19, 2017, 13:25:04 Nachmittag

Titel: Office 2013: With für mehrere Objekte
Beitrag von: Jonny am Juli 19, 2017, 13:25:04 Nachmittag
hallo geschätzte VBA profis!

ich habe ein problem bei dem ich um rat fragen möchte.
ich spreche mit meinm VBA code mehrere Textboxen an.
es sind allerdings ganz bestimmte textboxen, wie zb TextBox3 und TextBox6, wie im auszug des codes ersichtlich.

        With TextBox3
        .Value = ""
        .Enabled = False
        .BackColor = RGB(235, 235, 235)
        End With

        With TextBox6
        .Value = ""
        .Enabled = False
        .BackColor = RGB(235, 235, 235)
        End With

insgesamt geht es um 14 Textboxen die ich bearbeiten möchte - dadurch wird der code sehr unübersichtlich und ich möchte ihn gerne optimieren.
mit einer schleife (for... next...) komme ich leider nicht zurecht, da die nummern der Textboxen nicht fortlaufend sind.

kann mir bitte jemand einen tipp geben!?

ich stelle mir das in etwa so vor, dass man schreibt

        With TextBox3 And TextBox6 And 'alle Textboxen aufzählen
        ...
        End With

aber das funktioniert leider nicht.
hat jemand eine idee?

vielen dank, jonny
Titel: Antw:Office 2013: With für mehrere Objekte
Beitrag von: maninweb am Juli 19, 2017, 20:02:21 Nachmittag
Hallo,

hier mal ein Beispiel, wenn es sich um alle Textboxen in der UserForm handelt...

Code: Visual Basic
  1. Sub Test()
  2.  
  3.   Dim objControl As Control
  4.  
  5.   For Each objControl In Me.Controls
  6.    
  7.     If Not LCase(TypeName(objControl)) <> "textbox" Then
  8.    
  9.       objControl.Value = ""
  10.       objControl.Enabled = False
  11.       objControl.BackColor = RGB(235, 235, 235)
  12.    
  13.     End If
  14.    
  15.   Next
  16.  
  17. End Sub

Gruß
Titel: Antw:Office 2013: With für mehrere Objekte
Beitrag von: Jonny am Juli 20, 2017, 08:28:53 Vormittag
danke maninweb für deinen vorschlag!
leider ist es nicht jede textbox die verändert werden soll.
aber ich glaube mittlerweile dass es einfacher ist die namen anzupassen und mit einer loop zu arbeiten...
 
Titel: Antw:Office 2013: With für mehrere Objekte
Beitrag von: mumpel am Juli 20, 2017, 11:14:41 Vormittag
Hallo!

Du kannst die Textboxen auch in Frames packen. Die Frames kannst Du ohne Rahmen und Beschriftung darstellen. Alle Textboxen die bearbeitet werden sollen in ein Frame, die anderen in ein anderes Frame. Eventuell musst Du dann Deinen Code entsprechend anpassen. Dann könntest Du die erste Zeile des Codes auf das Frame beschränken (For Each objControl In Me.Frame1.Controls )

Gruß, René
Titel: Antw:Office 2013: With für mehrere Objekte
Beitrag von: Jonny am Juli 20, 2017, 13:41:21 Nachmittag
auch eine gute idee!
danke!
Titel: Antw:Office 2013: With für mehrere Objekte
Beitrag von: maninweb am Juli 20, 2017, 15:53:30 Nachmittag
Hallo,

alternativ zu mumpel's Vorschlag könntest Du auch eine Select-Case-Anweisung in den Code einbauen.
Beispielsweise:

Code: Visual Basic
  1. Sub Test()
  2.  
  3.   Dim objControl As Control
  4.  
  5.   For Each objControl In Me.Controls
  6.    
  7.     If Not LCase(TypeName(objControl)) <> "textbox" Then
  8.      
  9.       Select Case objControl.Name
  10.      
  11.         Case "TextBox1", _
  12.              "TextBox5", _
  13.              "TextBox10", _
  14.              "TextBox16"
  15.          
  16.           objControl.Value = ""
  17.           objControl.Enabled = False
  18.           objControl.BackColor = RGB(235, 235, 235)
  19.        
  20.         Case Else
  21.        
  22.       End Select
  23.      
  24.     End If
  25.    
  26.   Next
  27.  
  28. End Sub

Gruß