Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

VBA Werte Tabelle über UF ändern
#1
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!
Top
#2
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
Gruß Stefan
Win 10 / Office 2016
Top
#3
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.
Top
#4
Hallo Bernd,

Du irrst dich nicht.
Gruß Stefan
Win 10 / Office 2016
Top
#5
Hi Stefan,

hatte vorherigen Beitrag gerade ergänzt. Schau mal kurz drauf.
Top
#6
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?
Gruß Stefan
Win 10 / Office 2016
Top
#7
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.


Angehängte Dateien
.xlsm   BKTest_2.xlsm (Größe: 23,37 KB / Downloads: 25)
Top
#8
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
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Bernie
Top
#9
Hallo Stefan,

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

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


Gehe zu:


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