Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Userform Textboxinhalte in Zellen schreiben

Betrifft: Userform Textboxinhalte in Zellen schreiben von: Gerd Fänger
Geschrieben am: 11.08.2008 14:34:08

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

  

Betrifft: AW: Userform Textboxinhalte in Zellen schreiben von: Daniel
Geschrieben am: 11.08.2008 15:58:54

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


      

    Betrifft: AW: Userform Textboxinhalte in Zellen schreiben von: Gerd Fänger
    Geschrieben am: 11.08.2008 16:18:06

    Hallo Daniel!

    Vielen Dank für die schnelle Antwort. Werde leider erst morgen dazu kommen, Deine Tipps umzusetzen.

    Melde mich dann wieder.

    Gruß

    Gerd


      

    Betrifft: AW: Userform Textboxinhalte in Zellen schreiben von: Gerd Fänger
    Geschrieben am: 13.08.2008 07:27:10

    @ 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


      

    Betrifft: AW: Userform Textboxinhalte in Zellen schreiben von: Daniel
    Geschrieben am: 13.08.2008 13:08:12

    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


     

    Beiträge aus den Excel-Beispielen zum Thema "Userform Textboxinhalte in Zellen schreiben"