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.

EXCEL VBA geschickter und effizentere lösung
#1
heje excelfreunde

habe eine bitte an euch, wie ändere ich den nachfolgenden code in einen schnelleren, kürzeren und effizenteren code...


Code:
Public Sub BearbeiteEingabeDaten(ByVal strTB As String) 'TB.value = strTB gleich ""
 Dim TB As Object
 
 On Error GoTo Fehler
 
 For Each TB In UserForm1.frmFang1.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang2.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang3.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang4.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang5.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang6.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang7.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang9.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang10.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang11.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang12.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang13.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang14.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 For Each TB In UserForm1.frmFang15.Controls
     If TypeName(TB) = "TextBox" Then TB.Value = strTB
 Next TB
 UserForm1.frmFang8.TextBox212.Value = strTB
 UserForm1.frmFang8.TextBox214.Value = strTB
 UserForm1.frmFang8.TextBox216.Value = strTB
 UserForm1.frmFang8.TextBox218.Value = strTB
 UserForm1.frmFang8.TextBox220.Value = strTB
 UserForm1.frmFang8.TextBox222.Value = strTB
 UserForm1.frmFang8.TextBox224.Value = strTB
 UserForm1.frmFang8.TextBox226.Value = strTB
 UserForm1.frmFang8.TextBox228.Value = strTB
 UserForm1.frmFang8.TextBox230.Value = strTB
 UserForm1.frmFang8.TextBox232.Value = strTB
 UserForm1.frmFang8.TextBox234.Value = strTB
On Error GoTo 0
Exit Sub
Fehler:
If Err.Number > 0 Then
   MsgBox "CLS_01_01 Fehlercode : " + CStr(Err.Number) + "  " + Err.Description + "  " + CStr(Err.Source)
End If
End Sub
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#2
Moin Janosch!
Die Datei könnte beim Helfen helfen!

Daher erst mal nur ein allgemeiner Tipp:
Du scheinst Da ein Monster-Userform zu haben, welches auch noch etliches Frames hat.
Warum verwendest Du nicht einfach ein Sheet, welches als Formular dient.
Dies ist aus eigener Erfahrung erheblich einfacher zu handeln als ein "aus dem Ruder gelaufenes" UF.
Warum füllst Du 12(!) TextBoxes in einem Frame mit identischem Text?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hallo,

ebenfalls sehr allgemein:

Wenn man TextBoxen, Frames etc über eine Schleife abfragen kann, sind auch komplexe UserForm ganz gut zu handhaben.

Aber: hier im Form sind xlsm-Dateien mit verteiltem Code bei vielen nicht gerne gesehen.


Einfach gesagt: man soll es nicht wesentlich komplexer machen, als man es selbst handhanben kann.

mfg
Antworten Top
#4
heje excelfreunde, RPP63, Fennek,

ihr habt sicherlich recht, meine jetzige lösung sieht wie folgt aus...

Code:
Public Sub BearbeiteEingabeDaten(ByVal strTB As String) 'TB.value = strTB gleich ""
Dim TB As Object
Dim intZ1 As Integer
   
   On Error GoTo Fehler
   For intZ1 = 1 To 15 Step 1
       For Each TB In UserForm1.Controls("frmFang" + CStr(intZ1)).Controls
           If TypeName(TB) = "TextBox" Then TB.Value = strTB
       Next TB
       Set TB = Nothing
   Next intZ1

   With UserForm1.frmFang8
       For intZ1 = 212 To 234 Step 2
          .Controls("TextBox" + CStr(intZ1)).Value = strTB
       Next intZ1
   End With
   On Error GoTo 0
   Exit Sub
   
Fehler:
If Err.Number > 0 Then
   MsgBox "CLS01 Fehlercode : " + CStr(Err.Number) + "  " + Err.Description + "  " + CStr(Err.Source)
End If
End Sub

ja, selbst in jedem frame (1 - 15) sind jeweils  24 TextBoxen enthalten, die ausgelesen, gelöscht oder befüllt werden... somit 360 stück an der zahl. irgendwie muss das doch eleganter gehen, oder...
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top


Gehe zu:


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