ExCel VBA Werte in anderes Tabellenblatt?
Hallo, kurze Frage zu VBA, falls sich da jemand findet der das gut kann ^^
Wir müssen zur Hausübung folgendes Szenario "erschaffen":
Wir haben die Tabelle "Buchungsmaske", die in Spalte B freie Felder zur Eingabe von Werten hat (Beispiel: Datum - Konto-Nummer - Kontobezeichnung...). Diese sollen dann durch die Schaltfläche "speichern" in das bereits vorhandene Tabellenblatt "Buchungen" gespeichert werden, und zwar in die nächste freie ZEILE.
Ich habe schon danach gesucht aber finde kaum anwendbares für diesen Sachverhalt in Foren, bzw. suche ich möglicherweise auch falsch.
Mein Code derzeit:
Dim Copy As Range, Paste As Range
Dim aWerte()
Set Copy = Sheets("Buchungsmaske").Range("B4:B20")
Set Paste = Sheets("Buchungen").Range("A1:U20")
If Sheets("Buchungsmaske").CheckBox1.Value = True Then
aWerte() = Copy
Paste = aWerte()
End If
Laufzeitfehler der immer auftaucht ist "438"
Danke für die Hilfe im Vorraus!
4 Antworten
Die Lezte freie Zeile kannst du mit diesem Ausdruck ermitteln:
letzteZeile = Buchungen.Cells(Rows.Count, 1).End(xlUp).Row + 1
Ja letzteZeile ist eine frei erfundene Variable und daneben die Excelfunktion die die letzteZeile ermittelt.
Ich habe gerade gelesen du brauchst Spalte B dann sieht es so aus:
letzteZeile = Buchungen.Cells(Rows.Count, 2).End(xlUp).Row + 1
Du kannst auch eine Schleife machen die die Werte einzeln kopiert, das dauert auch nicht viel länger und das mit dem Do Events ist ein guter Tipp.
Wo befindet sich die Schaltfläche "speichern" ?
Auf einer eigenen Userform ?
oder verwendet ihr die Excel "Eigen-Maske" zum ändern von Tabellen Inhalten ?
Dein Code hat diverse Fehler.
Übertragen in eine Zelle:
Ziel = Quelle
Sheets("Buchungen").Range("A1").Value = Userform.Textbox.Text
oder..
Sheets("Buchungen").Range("A1:A17") = _
Sheets("Buchungsmaske").Range("B4:B20")
==
Wann immer möglich, dann "Copy Paste" vermeiden.
also das erste was mir auffällt die sind unterschiedlich groß
zweitens, wieso gibt man die Range beim Ziel an ?
ich kenne das eher so
Range(“A1:E21”).Copy Destination:=Sheets(“AnotherSheet”).Range(“A1”)
Falsche Herangehensweise:
Du musst erst mal feststellen, welche die erste, freie Zeile in der zu befüllenden Tabelle ist.
Du löst dies mit festen Vorgaben. Spätestens einer zweiten Befüllungsrunde fliegt Dir das um die Ohren.
Weiß ich auch, das ist ein aus einem Forum entstandener Vorschlag von eine Jahre alten Beitrag.
Weißt du die Verbesserung des Codes, so dass dieses Problem gelöst wird?
FUnktioniert jene von geri3d?
Das habe ich bereits umschrieben.
Sollte auch mit einfachen Programmierkenntnissen und bei Bedarf google zu programmieren sein.
Ein Tipp findet sich bereits unter den hier genannten Antworten - der aber nicht unbedingt funktionieren muss.
Ich würde eine Do While - Loop- Schleife programmieren, die von oben nach unten die Zellen einer Datenreihe prüft, die gefüllt sein muss.
Damit kann ich die nächste, leere Zeile ermitteln, wo ich die Daten anfügen kann.
Etwas in der Art dann auch für das Umkopieren / Verschieben.
Das dauert zwar prinzipiell länger als mit Skriptbasiertem Copy & Paste - arbeitet aber meiner Erfahrung nach zuverlässiger.
Vergiss nicht in den Schleifen mind. einen "DoEvents"-Befehl mit einzubauen, sonst sieht es bei längeren Läufen so aus, als ob Excel abgestürz wäre.
Ist letzteZeile eine Variable?
Und das daneben dann die Deklaration