Clever-Excel-Forum

Normale Version: VBA Werte Tabelle über UF ändern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Brauch mal kurz Hilfe.

UF öffnet mit 14 Textboxen, bei Click in eine Listboxzeile (Anzahl 6 Spalten) wird der Wert in die ersten 6 Textboxen übergeben. Die leeren Textboxen werden nun mit Werten gefüllt und bei Click auf Button soll der Datensatz aus Listbox die Zeile um die Werte der Textboxen 8-14 hinzufügen.

Bei meinem Versuch schreibt er immer die Werte in die zweite Zeile der Tabelle, wo liegt mein Fehler?

Code:
Private Sub cmd_ändern_Click()
'Datensatz ändern
Dim lng As Long
Dim i As Integer

lng = Sheets("Depot").Range("A1048576").End(xlUp).Offset(1, 1).Column
With frm_Depot
Sheets("Depot").Activate
Cells(lng, 1).Value = .TextBox1.Value
Cells(lng, 2).Value = .TextBox2.Value
Cells(lng, 3).Value = .TextBox3.Value
Cells(lng, 4).Value = .TextBox4.Value
Cells(lng, 5).Value = .TextBox5.Value
Cells(lng, 6).Value = .TextBox6.Value
Cells(lng, 7).Value = .TextBox7.Value
Cells(lng, 8).Value = .TextBox8.Value
Cells(lng, 9).Value = .TextBox9.Value
Cells(lng, 10).Value = .TextBox10.Value
Cells(lng, 11).Value = .TextBox11.Value
Cells(lng, 12).Value = .TextBox12.Value
Cells(lng, 13).Value = .TextBox13.Value
Cells(lng, 14).Value = .TextBox14.Value
End With
End Sub

Danke schon mal im Voraus!
Hallo,

Code:
lng = Sheets("Depot").Range("A1048576").End(xlUp).Offset(1, 1).Column

Column heißt auf Deutsch Spalte. Ergo wird bei dir in dieser Codezeile immer die 2 zurückgegeben. Mache es so

Code:
lng = Sheets("Depot").Range("A1048576").End(xlUp).Row +1

wobei ich anstatt der Zahl immer Rows.Count nehmen würde also so

Code:
lng = Sheets("Depot").Cells(Worksheets("Depot").Rows.Count, 1).End(xlUp).Row +1
Hi Stefan,

kurze Frage: steht das
Code:
Row +1
nicht dafür, dass in eine neue Zeile der Datensatz in die Tabelle geschrieben wird oder irre ich?

Ergänzung: ja, wie ich vermutet hatte, es wird eine neue Zeile an die bestehenden angefügt.

Mein Ansatz sollte sein: in der Listbox1 wird eine Zeile angeklickt, diese Werte werden in die ersten 6 von 14 Textboxen geladen, dann möchte ich in die Textboxen 7-10 Werte eingeben (Textbox 11-14 sind berechnende, Werte ergeben sich aus Textbox 7-10. Dann Klick auf Butten und die bereits bestende Zeile soll um die Daten der übrigen Werte aus Textbox 8-14 ergänzt werden. Also keine neue Zeile ansteuern sondern bestehende Zeile ergänzen.
Hallo Bernd,

Du irrst dich nicht.
Hi Stefan,

hatte vorherigen Beitrag gerade ergänzt. Schau mal kurz drauf.
Hallo Bernd,

ergänzen oder den Zellinhalt ändern? Wenn ändern: Warum änderst Du die Werte nicht in den Textboxen 1 bis 7 und schreibst sie dann zurück?
Hallo Stefan,

hab mal ne Beispielmappe eingestellt.

1. UF Depot öffnen
2. Listboxzeile anklicken und Texboxen 1-6 füllen sich
3. leere Textboxen füllen. Hier Testdaten: Kaufdatum 01.12.2013, Kaufkurs 100,00, Stück 1000, Trailing SL 10. Die restlichen Textboxen sind Berechnende, aber soweit bin ich noch nicht. Gib irgend etwas ein.
4. Klick auf Button = Tabelle Depot und die Listbox sollen aktualisiert werden.

Ich hoffe, dass es jetzt verständlicher war.
Hallo Bernd,

teste mal (da die Textboxen nur Text liefern, wandle ich die entsprechenden Werte um)

Code:
Private Sub cmd_ändern_Click()
'Datensatz ändern
Dim lng As Long

If ListBox1.ListIndex = -1 Then MsgBox "Nichts ausgewählt!", vbInformation: Exit Sub
lng = ListBox1.ListIndex + 2
'lng = Sheets("Depot").Cells(Worksheets("Depot").Rows.Count, 1).End(xlUp).Row
With frm_Depot
Sheets("Depot").Activate
Cells(lng, 1).Value = .TextBox1.Value
Cells(lng, 2).Value = .TextBox2.Value
Cells(lng, 3).Value = .TextBox3.Value
Cells(lng, 4).Value = .TextBox4.Value
Cells(lng, 5).Value = .TextBox5.Value
If IsNumeric(.TextBox6.Value) Then Cells(lng, 6).Value = CDbl(.TextBox6.Value)
If IsDate(.TextBox7.Value) Then Cells(lng, 7).Value = CDate(.TextBox7.Value)
If IsNumeric(.TextBox8.Value) Then Cells(lng, 8).Value = CCur(.TextBox8.Value)
If IsNumeric(.TextBox9.Value) Then Cells(lng, 9).Value = CLng(.TextBox9.Value)
Cells(lng, 10).Value = .TextBox10.Value
Cells(lng, 11).Value = .TextBox11.Value
Cells(lng, 12).Value = .TextBox12.Value
Cells(lng, 13).Value = .TextBox13.Value
Cells(lng, 14).Value = .TextBox14.Value
End With
UserForm_Initialize
End Sub
Hallo Stefan,

Funktioniert toll, genauso wie ich mir es vorgestellt hatte. Du bist einfach "SPITZE" :23:

Ein schönes Wochenende wünsche ich Dir!!!