Anzeige
Archiv - Navigation
1000to1004
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
Userform Textboxinhalte in Zellen schreiben
11.08.2008 14:34:08
Gerd
Guten Tag zusammen!
Bitte helft mir bei folgendem Problem:
In einer Userform habe ich eine ganze Reihe Textboxen, in die zum größten Teil Zahlen eingegeben werden.
Nun ist ja bekannt, dass beim Schreiben in Zellen der Inhalt der Textboxen als Text interpretiert wird. Mit der Anweisung CDbl kann man aber ja umwandeln und Kommazahlen werden rechtsbündig dargestellt.
Nun habe ich in der Userform wie gesagt eine ganz Reihe Textboxen, die in zum Teil nicht zusammenhängende Zellbereich geschrieben werden müssen.
Nach etlichen Versuchen der Schleifenbildung blieb mir nichts anderes, als Folgendes:
If UserForm1.tb1.Value "" Then Range("d91") = CDbl(UserForm1.tb1.Value) _
Else Range("d91") = UserForm1.tb1.Value
If UserForm1.tb2.Value "" Then Range("i91") = CDbl(UserForm1.tb2.Value) _
Else Range("i91") = UserForm1.tb2.Value
If UserForm1.tb3.Value "" Then Range("i92") = CDbl(UserForm1.tb3.Value) _
Else Range("i92") = UserForm1.tb3.Value
If UserForm1.tb4.Value "" Then Range("i93") = CDbl(UserForm1.tb4.Value) _
Else Range("i93") = UserForm1.tb4.Value
If UserForm1.tb5.Value "" Then Range("i94") = CDbl(UserForm1.tb5.Value) _
Else Range("i94") = UserForm1.tb5.Value
If UserForm1.tb6.Value "" Then Range("i95") = CDbl(UserForm1.tb6.Value) _
Else Range("i95") = UserForm1.tb6.Value
If UserForm1.tb7.Value "" Then Range("i96") = CDbl(UserForm1.tb7.Value) _
Else Range("i96") = UserForm1.tb7.Value
If UserForm1.tb8.Value "" Then Range("k91") = CDbl(UserForm1.tb8.Value) _
Else Range("k91") = UserForm1.tb8.Value
If UserForm1.tb9.Value "" Then Range("k92") = CDbl(UserForm1.tb9.Value) _
Else Range("k92") = UserForm1.tb9.Value
If UserForm1.tb10.Value "" Then Range("k93") = CDbl(UserForm1.tb10.Value) _
Else Range("k93") = UserForm1.tb10.Value
If UserForm1.tb11.Value "" Then Range("k94") = CDbl(UserForm1.tb11.Value) _
Else Range("k94") = UserForm1.tb11.Value
If UserForm1.tb12.Value "" Then Range("k95") = CDbl(UserForm1.tb12.Value) _
Else Range("k95") = UserForm1.tb12.Value
If UserForm1.tb13.Value "" Then Range("k96") = CDbl(UserForm1.tb13.Value) _
Else Range("k96") = UserForm1.tb13.Value
If UserForm1.AV.Value "" Then Range("g42") = CDbl(UserForm1.AV.Value) _
Else Range("g42") = UserForm1.AV.Value
If UserForm1.KV.Value "" Then Range("G43") = CDbl(UserForm1.KV.Value) _
Else Range("g43") = UserForm1.KV.Value
If UserForm1.PV.Value "" Then Range("g44") = CDbl(UserForm1.PV.Value) _
Else Range("g44") = UserForm1.PV.Value
If UserForm1.RV.Value "" Then Range("g45") = CDbl(UserForm1.RV.Value) _
Else Range("g45") = UserForm1.RV.Value
If UserForm1.ZV.Value "" Then Range("g46") = CDbl(UserForm1.ZV.Value) _
Else Range("g46") = UserForm1.ZV.Value
If UserForm1.BuchstC.Value "" Then Range("G48") = CDbl(UserForm1.BuchstC.Value) _
Else Range("g48") = UserForm1.BuchstC.Value
If UserForm1.BuchstD.Value "" Then Range("g49") = CDbl(UserForm1.BuchstD.Value) _
Else Range("g49") = UserForm1.BuchstD.Value
If UserForm1.BuchstE.Value "" Then Range("g50") = CDbl(UserForm1.BuchstE.Value) _
Else Range("g50") = UserForm1.BuchstE.Value
If UserForm1.BuchstF.Value "" Then Range("g51") = CDbl(UserForm1.BuchstF.Value) _
Else Range("g51") = UserForm1.BuchstF.Value
If UserForm1.BuchstCang.Value "" Then Range("h48") = CDbl(UserForm1.BuchstCang.Value) _
Else Range("h48") = UserForm1.BuchstC.Value
If UserForm1.BuchstDang.Value "" Then Range("h49") = CDbl(UserForm1.BuchstDang.Value) _
Else Range("h49") = UserForm1.BuchstD.Value
If UserForm1.BuchstEang.Value "" Then Range("h50") = CDbl(UserForm1.BuchstEang.Value) _
Else Range("h50") = UserForm1.BuchstE.Value
If UserForm1.BuchstFang.Value "" Then Range("h51") = CDbl(UserForm1.BuchstFang.Value) _
Else Range("h51") = UserForm1.BuchstF.Value
If UserForm1.UStdges.Value "" Then Range("e59") = CDbl(UserForm1.UStdges.Value) _
Else Range("e59") = UserForm1.UStdges.Value
If UserForm1.UStdLand.Value "" Then Range("e60") = CDbl(UserForm1.UStdLand.Value) _
Else Range("e60") = UserForm1.UStdLand.Value
If UserForm1.Abs1Direkt.Value "" Then Range("f81") = CDbl(UserForm1.Abs1Direkt.Value) _
Else Range("f81") = UserForm1.Abs1Direkt.Value
If UserForm1.Abs1NVK.Value "" Then Range("F82") = CDbl(UserForm1.Abs1NVK.Value) _
Else Range("f82") = UserForm1.Abs1NVK.Value
Fällt einem von euch irgendetwas ein, wie man so etwas zusammenfassen kann?
Vielen Dank im Voraus!
Gerd

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Textboxinhalte in Zellen schreiben
11.08.2008 15:58:54
Daniel
Hi
um die Formeln mal grundsätzlich etwas zu vereinfachen, gibt es folgende Optionen:
  • a) die IF-Abfragen vermeiden

  • 1. die Zellbereiche, in die die Werte geschrieben werden sollen, vorab löschen.
    2. die Textboxeninhalte ohne Prüfung übertragen, dafür aber mit OnErrrorResumeNext die Fehlerbehandlung für diesen Bereich ausschalten:
    
    Range("d91,i91,...").ClearContents
    On Error Resume Next
    Range("d91") = CDbl(UserForm1.tb1.Value)
    Range("i91") = CDbl(UserForm1.tb2.Value)
    On Error GoTo 0
    


    das Reduziert zwar nicht die Zeilen, aber zumindestmal die die Codelänge und es wird übersichtlicher

  • b) überflüssigen Code-Text vermeiden

  • wenn der Code innerhalb des Moduls der Useform steht, dann braucht die Userform nicht refernziert zu werden, statt "Userform1.Textbox1.Text" zu schreiben, reicht dann "Textbox1.Text"
  • c) wo möglich Schleifen bilden

  • Schleifen lassen sich immer dann bilden, wenn der Textboxenname aus einem Standard-Text und einer fortlaufenden Zählnummer besteht und die betroffenen Zellbereiche zusammenhängen.
    auch wenn man nur wenige Textboxen so zusammenfassen kann, spart die Schleife ab 4 Textboxen Codezeilen
    
    For i = 2 To 7
    Cells(89 + i, "i").Value = Controls("tb" & i).Text
    End Sub
    


    ansonsten wird es Schwierig, über eine Schleife was zu machen.

  • die ultimative Schleifenlösung (macht die oben gennanten Lösungen überflüssig)

  • jedes Steuerelement hat eine TAG-Eigenschaft, die du frei nutzen kannst.
    wenn du einmalig für jede Textbox den Zellbezug in die Tag-Eigenschaft schreibst, dann kannst du mit dieser Schleife alle Textboxen auf einmal in die Tabelle zurückschreiben:

    
    Dim cls As Control
    For Each cls In UserForm1.Controls
    If cls.Tag  "" Then
    If IsNumeric(cls.Value) Then
    Range(cls.Tag) = CDbl(cls.Value)
    Else
    Range(cls.Tag) = ""
    End If
    End If
    Next
    


    Gruß, Daniel

    Anzeige
    AW: Userform Textboxinhalte in Zellen schreiben
    11.08.2008 16:18:00
    Gerd
    Hallo Daniel!
    Vielen Dank für die schnelle Antwort. Werde leider erst morgen dazu kommen, Deine Tipps umzusetzen.
    Melde mich dann wieder.
    Gruß
    Gerd

    AW: Userform Textboxinhalte in Zellen schreiben
    13.08.2008 07:27:00
    Gerd
    @ Daniel
    Guten Morgen Daniel!
    Deine "ultimative Schleifenlösung", mit der die Tag-Eigenschaft der Steuerelemente genutzt wird, ist der absolute WAHNSINN!
    Das hat auf Anhieb funktioniert und hat etliche Code-Zeilen überflüssig gemacht.
    Wie kommt man nur auf solch geniale Ideen?
    Hochachtung!
    Gerd

    AW: Userform Textboxinhalte in Zellen schreiben
    13.08.2008 13:08:00
    Daniel
    Hi
    das man die TAG-Eigenschaft für eigene Zwecke nutzen kann, hab ich mal hier im Forum gelesen.
    der Rest ist dann halt eigene Kreativtät, bzw. lernt man halt beim Umgang mit Excel als (Halb-)Autodidakt bei einer Problemstellung nicht erst zu fragen: - gibt es einen passenden Befehl dafür ? - und diesen verzweifelt zu suchen, sondern - welche Befehle kenne ich, und kann ich diese irgendwie einsetzen, um das Problem zu lösen? -
    Gruß, Daniel
    Anzeige

    418 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige