VBA: Schleife zum Text-Eintragen
#1
Hallo zusammen,

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


Angehängte Dateien
.xlsm   HAMRacer - Problem mit Textbox-Schleife.xlsm (Größe: 25,91 KB / Downloads: 2)
Antworten Top
#2
Hallöchen,

Habe mir nur den Code und nicht die Datei angeschaut. Ermittle INHALT nach dem Einfügen. Die Schleife geht dann von LastZeile bis Inhalt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo André,

habe deinen Vorschlag wie beschrieben implementiert - leider passiert hier garnichts (er trägt nicht mal den Eintrag aus der Textbox in die Tabelle ein).

Gibt es irgendeine andere Möglichkeit?

Danke und Gruß
Domi
Antworten Top
#4
Hallöchen,
Kontrolliere die Variablen und den Code teil für den Inhalt der Textbox. Vergleiche z. B. auch mal.Value und.Text
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo Andre,

habe es nochmal versucht, aber irgendwie will der Code nicht funktionieren (oder ich bin zu blöd um's zu verstehen) Huh

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...

Gruß Domi
Antworten Top
#6
Hallöchen,

Du hast den Inhalt der Variablen nicht geprüft?

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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
(26.09.2021, 15:55)schauan schrieb: Hallöchen,

Du hast den Inhalt der Variablen nicht geprüft?

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

Hoffe, dass hilft.

Gruß Domi
Antworten Top
#8
Hallöchen,

das sollte eigentlich Dir helfen.
Wenn bei lastZeile und lastA z.B. 99 kommt, was kommt bei Inhalt?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo Andre,

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.
Antworten Top
#10
Hallöchen,

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:
  • HAMRacer44
Antworten Top


Gehe zu:


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