code im Commandbutton
#1
Hallo,

in meiner USERFORM sollen mit dem Commandbutton neue Datensätze untereinander aufgelistet werden

leider ergibt dieser code hier nur das ein Datensatz immer wieder überschrieben wird.

Er übernimmt die daten richtig jedoch sollen neue daten ja untereinander aufgereiht werden

Hier der Code:

Private Sub CommandButton1_Click()

Range("a2") = Nr
Range("b2") = Datum
Range("c2") = Betrag

End Sub

was muss ich anders schreiben

LG
Antworten Top
#2
Hi,

Google "Excel VBA nächste freie Zeile finden"
Antworten Top
#3
Bist Du Dir wirklich sicher, @gitmichi, dass VBA das Richtige für Dich ist?
Fange doch erst mal mit chinesisch bei rudimentären Portugiesisch-Kenntnissen an.
Ja, ich weiß, das klingt und ist böse.
Aber im Ernst:
Wenn ich gleich mal überhaupt keine Ahnung von der Materie habe, dann arbeite ich mich doch zunächst in die Grundlagen ein, bevor ich ein Forum frage.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
Hallo gitmichi, du möchtest Spaltenüberschriften per VBA eintragen? Oder handelt es sich bei Nr, Datum und Betrag um Variablen? Falls letzteres zutrifft, solltest du dich dringend mal mit der Benamung von Variablen beschäftigen. Ansonsten, zeig mal, was du schon hast.
Liebe Grüße Isa
Antworten Top
#5
Hallo und Danke,

hier die Datei.

Unter den Überschriften Nr. Datum und betrag sollen nacheinander Kundendaten untereinander aufgelistet werden.

Die richtige Tabelle hat wesentlich mehr Spalten, das mach ich dann alleine.

Ich möchte die daten in die maske eintragen und dann sollen die mit dem Drücken des  commandbutton in die Tabelle eingefügt werden.

Problem derzeit, es wird nur die erste zeile aktuallisiert statt aufgelistet und die maske soll nach dem drücken des Commandbutton wieder leer sein um weitere Daten anzulegen.

Danke und lieben Gruß
gitmichi


Angehängte Dateien
.xlsm   Kundendaten.xlsm (Größe: 17,29 KB / Downloads: 7)
Antworten Top
#6
Hi,

was hat denn Deine Google-Recherche nach "Excel VBA nächste freie Zeile finden" ergeben?
Antworten Top
#7
das hab ich gefunden, ob das funktioniert, kann ich später erst probieren..

cells(rows.count, 1).end(xiUP).offset(1).Select

Gibt es irgendwo gute zielführende Seiten??
Antworten Top
#8
Hallo,

aller Anfang ist schwer.

Du verwendest ein Listobjekt (formatierte Tabelle). Da kann man eine neue Zeile mit .ListRows.Add erzeugen und mit .Range.Resize gleich die zuvor in ein Array gepackten Werte der Textboxen in die neu erzeugte Zeile schreiben.

Du brauchst ein Array für eine Zeile und 3 Spalten. Dies definierst du so:
Code:
Dim arr(1 To 1, 1 To 3)

Statt den Textboxinhalt in Zellen zu schreiben, füllst du das vordefinierte Array so:
Code:
arr(1, 1) = Nr
arr(1, 2) = Datum
arr(1, 3) = Betrag
Das Listobjekt befindet sich auf dem Tabellenblatt "Tabelle1". Der Modulname des Tabellenblattes ist Tabelle1.
Das Erzeugen und Schreiben in die neue Zeile ist so strukturiert:
Modulname des Tabellenblattes.formatierte Tabelle.erzeuge neue Zeile.Bereich.Größe ändern = Array aus Werten der Textboxen.
Tabelle1.ListObjects(1).ListRows.Add.Range.Resize(1, 3) = arr
Den Inhalt der Textboxen entfernen reicht =""
komplette Ereignisprozedur:
Code:
Private Sub CommandButton1_Click()
    Dim arr(1 To 1, 1 To 3)
    arr(1, 1) = Nr
    arr(1, 2) = Datum
    arr(1, 3) = Betrag
    Tabelle1.ListObjects(1).ListRows.Add.Range.Resize(1, 3) = arr
    Nr = ""
    Datum = ""
    Betrag = ""
End Sub
Das ist natürlich sehr rudimentär. Ich hoffe es hilft dir weiter.

Gruß Uwe
Antworten Top
#9
Hallo Gitmichi, versuche es mal mit diesen Codes. Allerdings müsstest du deine Objekte wieder mit den Standardnamen versehen, sonst klappt das nicht. Der Vorteil wäre, dass du am Programm nichts ändern musst, wenn du weitere TextBoxen zufügst. Die Labels ziehen ihre Inhalte aus der Tabelle. Das hat den Vorteil, dass eventuelle Änderungen automatisch übernommen werden.

Code:
Option Explicit
Dim lSpalte As Long
Dim lZiel As Long

Private Sub CommandButton1_Click()
    Dim lZeile As Long
    lZeile = Tabelle1.Range("A1").End(xlDown).Row + 1
    For lSpalte = 1 To lZiel
        Tabelle1.Cells(lZeile, lSpalte) = Controls("TextBox" & lSpalte)
        If lSpalte = 2 Then Tabelle1.Cells(lZeile, 2) = CDate(TextBox2)
    Next lSpalte
End Sub

Private Sub UserForm_Initialize()
    lZiel = Tabelle1.Rows(1).End(xlToRight).Column
    For lSpalte = 1 To lZiel
        Controls("Label" & lSpalte) = Tabelle1.Cells(1, lSpalte).Value
    Next lSpalte
End Sub
Liebe Grüße Isa
Antworten Top
#10
Hi,

Zitat:cells(rows.count, 1).end(xiUP).offset(1).Select

Das ist doch schon mal gut!

Diese Codezeile wählt die erste leere Zelle in Spalte A (dafür steht die 1) von UNTEN aus - wandert also von der letzten Zeile in einem Blatt (rows.count) nach oben, bis ein Eintrag vorhanden ist, und wandert dann 1 Zeile runter (offset(1) ). Das Select wählt die leere Zelle dann aus - das muss man aber nicht.
Stattdessen kann man dieser so ermittelten (leeren) Zelle direkt einen Wert zuweisen mit:

cells(rows.count, 1).end(xiUP).offset(1).Value = "Dein Wert"

Für Spalte B musst Du nur die 1 in eine 2 ändern, für Spalte C entsprechend in eine 3.

Üblicherweise ermittelt man nur 1 mal die entsprechende Zeile, weist sie einer Variablen zu und nutzt dann diese Variable für die Cells-Eigenschaft:

DeineVariable =  cells(rows.count, 1).end(xiUP).offset(1).Row

Und die Werte trägst Du dann ein mit:

Cells(DeineVariable, 1).Value = Nr
Cells(DeineVariable, 2).Value = Datum
Cells(DeineVariable, 3).Value = Betrag
Antworten Top


Gehe zu:


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