ich habe eine UF, in der ich einen String eingebe. Dieser String dient als Planname und soll in Tabelle9, Spalte A fortlaufend eingetragen werden.
Ich habe es hinbekommen, die anderen Einträge des Plans zu kopieren und einzufügen, was soweit auch klappt (wenn auch anfängermäßig).
Nun zu meiner Frage: Wie kann ich programmieren, dass parallel zur Kopie der anderen Zellen die Eingabe aus der Textbox übernommen wird. Da die Einträge des Plans unterschiedlich lange sind (also untersch. Anzahl Zeilen), muss auch der Name des Plans bzw. die Anzahl Einträge der Textbox sich daran anpassen.
Code:
Private Sub cmdPlanSpeichern_Click() Dim lastZeile As Long Dim Inhalt As Long Dim i As Integer
lastZeile = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row + 1 'sucht die nächstfreie Zeile in Tabelle9 auf Basis von Spalte 3 Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row
Tabelle10.Range("M6:P45").Copy 'kopiert die Auswahl bzw. den Trainingsplan in die Datenbank Tabelle9.Cells(lastZeile, 3).PasteSpecial Paste:=xlValues 'fügt die kopierten Warte (!) in die nächstfreie Zeile
For i = Inhalt To lastZeile Tabelle9.Cells(Rows.Count, 1).Value = frmPlanSpeichern.txtNameTrainingsplan.Value Next i
Habe es (so weit möglich mit meinem schlechten Schleifen-Wissen) versucht, das funzt aber leider nicht.
Hoffe habe mein Problem klar genug beschreiben können, Beispieldatei ist anbei.
Danke euch wie immer für eure Hilfe und schönen Samstag, Domi
habe deinen Vorschlag wie beschrieben implementiert - leider passiert hier garnichts (er trägt nicht mal den Eintrag aus der Textbox in die Tabelle ein).
habe es nochmal versucht, aber irgendwie will der Code nicht funktionieren (oder ich bin zu blöd um's zu verstehen)
Habe mittlerweile die Schleife etwas erweitert und immerhin trägt er mit in die ersten zwei Zeilen in Spalte A, welche gleich die ersten zwei Einträge in Spalte C entsprechen, den Namen ein. Mein Problem ist nun, wenn ich in Spalte C vier Einträge habe, dass mit dementsprechend die letzten zwei Zeilen in Spalte A nicht ausgefüllt werden.
Code:
Private Sub cmdPlanSpeichern_Click() Dim lastZeile As Long Dim lastA As Long Dim Inhalt As Long Dim i As Integer Dim z As Integer
lastZeile = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row + 1 'sucht die nächstfreie Zeile in Tabelle9 auf Basis von Spalte 3 lastA = Tabelle9.Cells(Rows.Count, 1).End(xlUp).Row + 1 Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row
Tabelle10.Range("M6:P45").Copy 'kopiert die Auswahl bzw. den Trainingsplan in die Datenbank Tabelle9.Cells(lastZeile, 3).PasteSpecial Paste:=xlValues 'fügt die kopierten Warte (!) in die nächstfreie Zeile
For i = Inhalt To lastZeile Tabelle9.Cells(lastZeile + z, 1) = frmPlanSpeichern.txtNameTrainingsplan.Value z = z + 1 Next i
End Sub
Wie kann ich erreichen, dass der Eintrag des Namens über die ganze Zeilenanzahl eingefügt wird?
Danke nochmal und sorry für die umständliche Fragerei, bin VBA regelrecht am entdecken...
lastZeile = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row + 1 'sucht die nächstfreie Zeile in Tabelle9 auf Basis von Spalte 3 lastA = Tabelle9.Cells(Rows.Count, 1).End(xlUp).Row + 1 Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row
Schreibe mal einen Kommentar in die Zeile mit Inhalt = ... was da gemacht wird, analog zum Kommentar bei lastZeile.
Hallo schauan,
sorry...
Code:
lastA = Tabelle9.Cells(Rows.Count, 1).End(xlUp).Row + 1 'Sucht die nächste-freie Zeile basierend auf den Plan-Namen Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row 'Prüft, bis wohin in Spalte 3 die Zeilen befüllt sind
angenommen lastZeile = 99 und lastA=99-Anzahl neue Zeilen in Spalte C (was beim Einfügen 6 zeilen wären, also kommt korrekterweise 93 raus), käme bei Inhalt = 98 raus. Allerdings scheint es mir das die Einträge immer "hinterherhinken". Wenn ich das erste Mal etwas "eintragen/speichern" will, trägt er in Spalte A nichts ein. Speichere ich den zweiten Plan mit "Name2", trägt er für "Plan1" (also für den ersten Plan) den "Name2" ein usw., d.h. er tut so als ob der erste Plan nicht existieren würde.
so, richtig erkannt. Inhalt hat eins weniger als lastZeile. Wenn Du die Kommentare anders schreibst, wären das zu sehen:
lastA = Tabelle9.Cells(Rows.Count, 1).End(xlUp).Row + 1 'Sucht die nächste-freie Zeile basierend auf den Plan-Namen Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row 'Prüft, bis wohin in Spalte 3 die Zeilen befüllt sind
lastA = Tabelle9.Cells(Rows.Count, 1).End(xlUp).Row + 1 'Prüft, bis wohin in Spalte 3 die Zeilen befüllt sind und nimmt die nächste Zeile Inhalt = Tabelle9.Cells(Rows.Count, 3).End(xlUp).Row 'Prüft, bis wohin in Spalte 3 die Zeilen befüllt sind
Deine Schleife geht nun so
For i = Inhalt To lastZeile
und wenn Du nun die Zahlen aus dem "Gedankenbeispiel" einträgst wäre das
For i = 98 To 99
Entsprechend werden zwei Zeilen befüllt, die 98 und die 99
In der 98 stand eventuell vorher schon was, das war ja die letzte befüllte. 99 ist nun die erste, wo Du die Daten einfügst
Ich hatte ja vorgeschlagen, eine Variable erst nach dem Einfügen zu ermitteln. Die sollte dann so um die 40 größer sein als die andere...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • HAMRacer44