Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textboxinhalt in nächste freie Zelle schreiben

Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 09:43:14
Stefan
Hi,
ich hab da ein kleines Problem. Ich habe ein UserForm in dem mehrere Textboxen enthalten sind. Immer 10 in einer Reihe. Hier soll der User Werte eintragen und mit Knopfdruck werden diese in die Exceltabelle gesendet. Insgesamt sind es 12 Reihen a 10 Textboxen. im Idealfall werden alle mit Werten Gefüllt und Pro Reihe Textboxen in eine Zeile der Tabelle geschrieben.Das hab ich auch soweit hin bekommen. Jetzt soll er aber, wenn in der Tabelle die Zeile schon voll ist einfach die nächste Zeile nehmen und alle Textboxinhalte in die nächsten Freien Zeilen schreiben.Für jede Reihe Textboxen (10Stk.) eine Zeile in der Tabelle. Das Problem ist, dass es auch sein kann, das nicht ale Reihen an Textboxen gefüllt sind dann soll er Trotzdem Untereinander schreiben und die leeren Textboxen ignorieren. Die Erste Reihe Textboxen wird immer ausgefüllt sein. Vielleicht hilft das.
Folgend den Code, wie er bisher ist. Hier wird nur die Erste Reihe von insgesamt 12 berücksichtigt.
Private Sub CommandButton1_Click()
Dim lZeile As Long
If Trim(CStr(TextBox1.Text)) = "" Then
MsgBox "Vorn anfangen zu schreiben!", vbCritical + vbOKOnly, "FEHLER!"
Exit Sub
End If
lZeile = 4
Do While Trim(CStr(Tabelle1.Cells(3, 1).Value))  ""
On Error Resume Next
Tabelle1.Cells(lZeile, 2).Value = Trim(CStr(TextBox501.Value))
Tabelle1.Cells(lZeile, 3).Value = TextBox601.Value
Tabelle1.Cells(lZeile, 4).Value = TextBox11.Value
Tabelle1.Cells(lZeile, 5).Value = TextBox12.Value
Tabelle1.Cells(lZeile, 6).Value = TextBox13.Value
Tabelle1.Cells(lZeile, 7).Value = TextBox14.Value
Tabelle1.Cells(lZeile, 8).Value = TextBox15.Value
Tabelle1.Cells(lZeile, 9).Value = TextBox16.Value
Tabelle1.Cells(lZeile, 10).Value = TextBox17.Value
Tabelle1.Cells(lZeile, 11).Value = TextBox18.Value
Tabelle1.Cells(lZeile, 12).Value = TextBox19.Value
Tabelle1.Cells(lZeile, 13).Value = TextBox20.Value
Exit Do
lZeile = lZeile + 1
ActiveWorkbook.Save
Unload Me
End Sub
Vielleicht kann sich ja jemand mit meinem problem auseinandersetzen.
Viele Grüße
Stefan
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 10:20:03
UweD
Hallo
- Beispieldatei?
- ich baue die Userform nicht nach, und kann deshalb nicht testen.
Ein Tipp
Hiermit wird die erste Freie Zeile ermittelt.
lZeile = Sheets("Tabelle1").Cells.SpecialCells(xlCellTypeLastCell).Row +1
LG UweD
AW: Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 13:02:25
Stefan
https://www.herber.de/bbs/user/107938.xlsm
Im Anhang, eine Beispieldatei...
Anzeige
AW: Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 13:37:50
UweD
Hallo
du hast in Blatt1 irgendwas in Zeile 4 bis 951 drinstehen.
Lösche mal die kompletten Zeilen, und 1x speichern
Wenjn du jetzt die letzte benutzte Zeile ermittels, wird 4 angezeigt.
Da gilt für Tabelle 1, hier musst du noch 1 addieren, dann hast su die erste Freie Zeile
als auch für Tabelle 2..
so klappt es aber...
Private Sub UserForm_Activate()
   Dim lZeile As Long
   
     TextBox501 = ""
     TextBoxDatum = ""
     TextBox601 = ""
     TextBox602 = ""
     TextBox603 = ""
     TextBox604 = ""
     
     TextBox11 = ""
     TextBox12 = ""
     TextBox13 = ""
     TextBox14 = ""
     TextBox15 = ""
     TextBox16 = ""
     TextBox17 = ""
     TextBox18 = ""
     TextBox19 = ""
     TextBox20 = ""

     TextBox21 = ""
     TextBox22 = ""
     TextBox23 = ""
     TextBox24 = ""
     TextBox25 = ""
     TextBox26 = ""
     TextBox27 = ""
     TextBox28 = ""
     TextBox30 = ""
     
     TextBox31 = ""
     TextBox32 = ""
     TextBox33 = ""
     TextBox34 = ""
     TextBox35 = ""
     TextBox36 = ""
     TextBox37 = ""
     TextBox38 = ""
     TextBox40 = ""
     
     TextBox41 = ""
     TextBox42 = ""
     TextBox43 = ""
     TextBox44 = ""
     TextBox45 = ""
     TextBox46 = ""
     TextBox47 = ""
     TextBox48 = ""
     TextBox49 = ""
     TextBox50 = ""
    
     
     TextBox11.SetFocus
     Me!TextBox11.TabIndex = 1
     Me!TextBox12.TabIndex = 2
     Me!TextBox13.TabIndex = 3
     Me!TextBox14.TabIndex = 4
     Me!TextBox15.TabIndex = 5
     Me!TextBox16.TabIndex = 6
     Me!TextBox17.TabIndex = 7
     Me!TextBox18.TabIndex = 8
     Me!TextBox19.TabIndex = 9
     Me!TextBox20.TabIndex = 10
     
     Me!TextBox21.TabIndex = 11
     Me!TextBox22.TabIndex = 12
     Me!TextBox23.TabIndex = 13
     Me!TextBox24.TabIndex = 14
     Me!TextBox25.TabIndex = 15
     Me!TextBox26.TabIndex = 16
     Me!TextBox27.TabIndex = 17
     Me!TextBox28.TabIndex = 18
     Me!TextBox29.TabIndex = 19
     Me!TextBox30.TabIndex = 20
     
     Me!TextBox31.TabIndex = 21
     Me!TextBox32.TabIndex = 22
     Me!TextBox33.TabIndex = 23
     Me!TextBox34.TabIndex = 24
     Me!TextBox35.TabIndex = 25
     Me!TextBox36.TabIndex = 26
     Me!TextBox37.TabIndex = 27
     Me!TextBox38.TabIndex = 28
     Me!TextBox39.TabIndex = 29
     Me!TextBox40.TabIndex = 30
     
     Me!TextBox41.TabIndex = 31
     Me!TextBox42.TabIndex = 32
     Me!TextBox43.TabIndex = 33
     Me!TextBox44.TabIndex = 34
     Me!TextBox45.TabIndex = 35
     Me!TextBox46.TabIndex = 36
     Me!TextBox47.TabIndex = 37
     Me!TextBox48.TabIndex = 38
     Me!TextBox49.TabIndex = 39
     Me!TextBox50.TabIndex = 40
    
         lZeile = Tabelle2.Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes 
         Do While Trim(CStr(Tabelle1.Cells(3, 1).Value)) <> ""
        
        
            
                 TextBoxDatum = Trim(CStr(Tabelle1.Cells(lZeile, 16).Value))
                 TextBox501 = Tabelle2.Cells(lZeile, 1).Value
                 TextBox1 = Tabelle2.Cells(lZeile, 2).Value
                 TextBox2 = Tabelle2.Cells(lZeile, 3).Value
                 TextBox3 = Tabelle2.Cells(lZeile, 4).Value
                 TextBox4 = Tabelle2.Cells(lZeile, 5).Value
                 TextBox5 = Tabelle2.Cells(lZeile, 6).Value
                 TextBox6 = Tabelle2.Cells(lZeile, 7).Value
                 TextBox7 = Tabelle2.Cells(lZeile, 8).Value
                 TextBox8 = Tabelle2.Cells(lZeile, 9).Value
                 TextBox9 = Tabelle2.Cells(lZeile, 10).Value
                 TextBox10 = Tabelle2.Cells(lZeile, 11).Value
                 TextBox601 = Tabelle2.Cells(lZeile, 12).Value
                 TextBox602 = Tabelle2.Cells(lZeile, 13).Value
                 TextBox603 = Tabelle2.Cells(lZeile, 14).Value
                 TextBox604 = Tabelle2.Cells(lZeile, 15).Value
                
                 Exit Do
        
             lZeile = lZeile + 1
        
         Loop
        
End Sub





'Speichern Schaltfläche 
Private Sub CommandButton1_Click()
   Dim lZeile As Long
   
      If Trim(CStr(TextBox1.Text)) = "" Then
         
         MsgBox "Vorn anfangen zu schreiben!", vbCritical + vbOKOnly, "FEHLER!"
        
         Exit Sub
     End If
    
     
     lZeile = Tabelle1.Cells.SpecialCells(xlCellTypeLastCell).Row + 1 'erste freie Zeile des gesamten Blattes 
    

     Do While Trim(CStr(Tabelle1.Cells(3, 1).Value)) <> ""
    

             On Error Resume Next
             Tabelle1.Cells(lZeile, 2).Value = Trim(CStr(TextBox501.Value))
             Tabelle1.Cells(lZeile, 3).Value = TextBox601.Value
             Tabelle1.Cells(lZeile, 4).Value = TextBox11.Value
             Tabelle1.Cells(lZeile, 5).Value = TextBox12.Value
             Tabelle1.Cells(lZeile, 6).Value = TextBox13.Value
             Tabelle1.Cells(lZeile, 7).Value = TextBox14.Value
             Tabelle1.Cells(lZeile, 8).Value = TextBox15.Value
             Tabelle1.Cells(lZeile, 9).Value = TextBox16.Value
             Tabelle1.Cells(lZeile, 10).Value = TextBox17.Value
             Tabelle1.Cells(lZeile, 11).Value = TextBox18.Value
             Tabelle1.Cells(lZeile, 12).Value = TextBox19.Value
             Tabelle1.Cells(lZeile, 13).Value = TextBox20.Value
            
             Exit Do
            
   
    
         lZeile = lZeile + 1
     Loop
ActiveWorkbook.Save
Unload Me
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Gruß UweD
Anzeige
AW: Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 15:34:15
Stefan
Hi, danke für die Mühe.
Aber bei mir gehts garnich. Das Userform geht auf ich trag werte ein, drücke auf speichern, aber in der Tabelle ist nichts drin.
Viele Grüße
AW: Textboxinhalt in nächste freie Zelle schreiben
01.09.2016 15:42:58
UweD
sieh mal in Zeile 950 ff nach
AW: Textboxinhalt in nächste freie Zelle schreiben
02.09.2016 09:26:24
Stefan
Hab ich, nix drin und auch alles Zeilen gelöscht bis dahin und ab da.?
Anzeige
dann bitte nochmal Originaldatei hochladen
02.09.2016 09:53:40
UweD
AW: dann bitte nochmal Originaldatei hochladen
02.09.2016 11:48:49
Stefan
Halt, Stop, jetz gehts.
Danke für die Hilfe. Ich werd mal weiter bauen.
ok, dann zu
02.09.2016 11:53:38
UweD
Anzeige
AW: Textboxinhalt in nächste freie Zelle schreiben
02.09.2016 10:56:25
baschti007
Hey Ho versuch es mal so
Gruß Basti

Option Explicit
Private Sub UserForm_Activate()
Dim lZeile As Long
Dim c As Control
Dim x As Long
Dim n As Long
TextBox501 = ""
TextBoxDatum = ""
n = 1
For x = 11 To 50
With UserForm1
.Controls("TextBox" & x) = ""
.Controls("TextBox" & x).TabIndex = n
n = n + 1
End With
Next
UserForm1.TextBox11.SetFocus
lZeile = Tabelle2.Cells(1048576, 1).End(xlUp).Row 'Letzte Zeile des gesamten Blattes
Do While Trim(CStr(Tabelle1.Cells(3, 1).Value))  ""
TextBoxDatum = Trim(CStr(Tabelle1.Cells(lZeile, 16).Value))
TextBox501 = Tabelle2.Cells(lZeile, 1).Value
For x = 1 To 10
With UserForm1
.Controls("TextBox" & x) = Tabelle2.Cells(lZeile, x + 1).Value
End With
Next
TextBox601 = Tabelle2.Cells(lZeile, 12).Value
TextBox602 = Tabelle2.Cells(lZeile, 13).Value
TextBox603 = Tabelle2.Cells(lZeile, 14).Value
TextBox604 = Tabelle2.Cells(lZeile, 15).Value
Exit Do
lZeile = lZeile + 1
Loop
End Sub
'Speichern Schaltfläche
Private Sub CommandButton1_Click()
Dim lZeile As Long
Dim x As Long
Dim h As Long
Dim i As Long
If Trim(CStr(TextBox1.Text)) = "" Then
MsgBox "Vorn anfangen zu schreiben!", vbCritical + vbOKOnly, "FEHLER!"
Exit Sub
End If
lZeile = Tabelle1.Cells(1048576, 1).End(xlUp).Row + 1  'erste freie Zeile des gesamten  _
Blattes
Do While Trim(CStr(Tabelle1.Cells(3, 1).Value))  ""
On Error Resume Next
For x = 0 To 3
Tabelle1.Cells(lZeile + x, 2).Value = Trim(CStr(UserForm1.TextBox501.Value))
Tabelle1.Cells(lZeile + x, 3).Value = UserForm1.Controls("TextBox60" & x + 1). _
Text
For i = 1 To 10
With UserForm1
Tabelle1.Cells(lZeile + x, 3 + i) = CDbl(.Controls("TextBox" & 10 + h + i). _
Text)
End With
Next
h = h + 10
Next
Exit Do
lZeile = lZeile + 1
Loop
ActiveWorkbook.Save
Unload Me
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Textboxinhalt in die nächste freie Zelle übertragen


Schritt-für-Schritt-Anleitung

Um den Inhalt von Textboxen in ein Excel-Arbeitsblatt zu schreiben, folge diesen Schritten:

  1. UserForm erstellen: Erstelle eine UserForm mit mehreren Textboxen. In diesem Beispiel nehmen wir an, dass du 12 Reihen mit jeweils 10 Textboxen hast.

  2. Code für den Speichern-Button: Füge den folgenden VBA-Code in den CommandButton deiner UserForm ein, um die Werte in die Excel-Tabelle zu schreiben.

Private Sub CommandButton1_Click()
    Dim lZeile As Long
    If Trim(CStr(TextBox1.Text)) = "" Then
        MsgBox "Vorn anfangen zu schreiben!", vbCritical + vbOKOnly, "FEHLER!"
        Exit Sub
    End If
    lZeile = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Erste freie Zeile ermitteln
    Do While Trim(CStr(Cells(lZeile, 1).Value)) <> ""
        lZeile = lZeile + 1 ' Nächste freie Zeile suchen
    Loop

    Cells(lZeile, 1).Value = TextBox501.Value
    Cells(lZeile, 2).Value = TextBox601.Value
    ' Füge weitere Textboxen nach Bedarf hinzu

    ActiveWorkbook.Save
    Unload Me
End Sub
  1. Textboxen ignorieren: Der Code oben ignoriert leere Textboxen, da nur ausgefüllte Werte in die nächste Zeile geschrieben werden.

Häufige Fehler und Lösungen

  • Fehler: "Vorn anfangen zu schreiben!": Dieser Fehler tritt auf, wenn die erste Textbox leer ist. Stelle sicher, dass alle Pflichtfelder gefüllt sind, bevor du auf Speichern klickst.

  • Problem: Daten werden nicht gespeichert: Überprüfe, ob die Zellen in deiner Excel-Tabelle nicht geschützt sind oder ob du die richtige Tabelle angibst.

  • Fehler: Inhalte werden in die falsche Zelle geschrieben: Achte darauf, dass die richtige Zeile und Spalte in deinem Code angegeben sind.


Alternative Methoden

  • Verwendung von Arrays: Du kannst die Textboxen auch in ein Array speichern und dann in einer Schleife in die Zellen schreiben. Dies kann den Code vereinfachen und die Wartbarkeit erhöhen.
Dim TextArray(1 To 10) As String
For i = 1 To 10
    TextArray(i) = Me.Controls("TextBox" & i).Value
Next i

For i = 1 To 10
    Cells(lZeile, i + 1).Value = TextArray(i) ' Werte in die nächste freie Zelle schreiben
Next i

Praktische Beispiele

  1. Textboxen in nächste Zelle schreiben: Wenn du 10 Textboxen hast, die jeweils einen Namen aufnehmen, kannst du die Werte in die Spalten A bis J der nächsten freien Zeile schreiben.

  2. Daten in nächster Zeile weiterschreiben: Wenn du die Daten für mehrere Benutzer erfassen möchtest, kannst du das UserForm mehrfach öffnen und jedes Mal die Daten in die nächste Zeile schreiben, ohne bereits vorhandene Daten zu überschreiben.


Tipps für Profis

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung, um unerwartete Eingaben zu berücksichtigen, z.B. Text in Feldern, wo Zahlen erwartet werden.

  • Validierung der Eingaben: Füge vor dem Speichern Validierungschecks hinzu, um sicherzustellen, dass die Daten korrekt sind.

  • Makros optimieren: Optimiere deinen VBA-Code, um die Ausführungsgeschwindigkeit zu erhöhen, z.B. durch Vermeidung unnötiger Zellzugriffe.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Daten in die richtige Zelle geschrieben werden? Du kannst die erste freie Zeile ermitteln, indem du den Befehl Cells(Rows.Count, 1).End(xlUp).Row + 1 verwendest.

2. Was passiert, wenn ich eine Textbox leer lasse? Leere Textboxen werden ignoriert, und es wird nur der Inhalt der ausgefüllten Textboxen in die nächste freie Zelle geschrieben.

3. Kann ich diese Methode auch für andere Formulare verwenden? Ja, die Methode ist universell und kann auf verschiedene Formulare und Textboxen angewendet werden. Achte lediglich darauf, die entsprechenden Steuerelementnamen zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige