Excel VBA Einträge als Liste untereinander kopieren?


11.11.2022, 01:24

Nett wäre es, wenn ihr mir einen Code schickt die eizelnen Begrifflichkeiten zu kommentieren damit ich nicht nur copy paste mache sondern auch daraus lernen kann. :)

1 Antwort

Du hast bei deinem Code irgendwie einen Denkfehler drin. Du suchst von J3 aus nach rechts nach der ersten leeren Zelle. Du willst ja aber eigentlich nach unten suchen. Und beim Einfügen benutzt du "Transpose". Dadurch werden die Zeilen zu Spalten und die Spalten zu Zeilen. Du willst ja aber einfach nur die Zeile unten dran kopieren.

Ich würde es so machen:

  1. Mache aus deinem Ergebnisbereich eine Tabelle (nicht verwechseln mit dem Tabellenblatt, was standardmäßig auch mit "Tabelle1" oder so beschriftet wird). Dazu markierst du den Bereich J2 bis N3 und drückst Strg+T und dann OK. Das hat den Vorteil, dass es einerseits einfacher durch VBA verwaltbar ist und du andererseits übersichtlicherer Excel-Formeln hast, wo dann nicht J3:J10 oder so drinsteht, sondern z.B. Liste_Buchungen[Datum]
  2. Gib der Tabelle einen Namen. Dazu gehst du oben ins Menü "Tabellenentwurf" und kannst dann ganz links in die Box einen Namen schreiben. Ich hab die Liste z.B. "Liste_Buchungen" genannt.
  3. Mit folgendem Code kannst du eine neue Zeile daran anfügen:
Option Explicit ' Das schreib ich immer mit rein. Dadurch akzeptiert VBA nur Variablen, die vorher mit Dim erstellt wurden

Sub Neuer_Eintrag()
    ' Eine Variable für die Tabelle "Liste_Buchungen" erstellen
    Dim listBuchungen As ListObject
    Set listBuchungen = ActiveSheet.ListObjects("Liste_Buchungen")

    ' Eine neue (leere) Zeile anfügen und mit der Variable "neueZeile" verknüpfen
    Dim neueZeile As ListRow
    Set neueZeile = listBuchungen.ListRows.Add
    
    ' Die fünf Eingabezellen in die neue Zeile kopieren
    neueZeile.Range.Value = Me.Range("A3:E3").Value
End Sub

Der Code muss in den Code für das Tabellenblatt rein, sonst funktioniert die letzte Zeile nicht oder du musst "Me.Range" ändern zu "ActiveSheet.Range".

Und auch wenn ich es bei ziemlich vielen Excel-Fragen sage und fast nie jemand auf mich hört: Excel ist keine Datenbanksoftware und sollte daher auch nicht als Datenbank benutzt werden. Wenn die Datenbestände größer werden oder Daten mit Daten aus anderen Tabellen verknüpft werden sollen oder Daten anhand bestimmter Kriterien verändert oder gelöscht werden sollen, ist das mit Excel ein wesentlich größerer Aufwand, als mit einer echten Datenbank.


CrownToFish 
Beitragsersteller
 12.11.2022, 11:29

Vielen Dank das hat mir sehr geholfen. Wie ändere ich denn den Wert wenn ich die Tabelle auf einem anderen Blatt habe? Denke die Variable wird gleich erstellt. Muss da nichts ändern. Aber fürs kopieren.
neueZeile.Range.Value = Me.Range("A3:E3").Value was muss ich da ändern?

daCypher  14.11.2022, 08:05
@CrownToFish

Also die Buttons bleiben bei den Eingabefeldern, aber die Tabelle ist auf einem anderen Blatt?

Dann musst du bei der Variable "listBuchungen" noch mit angeben, auf welchem Tabellenblatt sie ist. Also z.B. so:

Set listBuchungen = Worksheets("Zieltabelle").ListObjects("Liste_Buchungen")

Und "Zieltabelle" ist dann halt der Name des Tabellenblatts, was unten auf dem Aktenreiter steht, wo du zwischen den Tabellenblättern wechseln kannst.