Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: In anderem Blatt in nächste freie Spalte einfügen

In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 12:27:54
sammawatt
Hallo Forum,

ich habe hier ein Makro, dass u.a. einige Zellen kopiert und diese auf einem anderen Blatt einfügt. Da diese Daten aber irgendwann überschrieben werden, will ich diese als "Historie" auf einem separaten Blatt abspeichern, jeweils in der nächsten freien Spalte (somit füllt sich das Blatt mit der Zeit).

Da das Kopieren im Makro ja schon vorgesehen ist, brauch ich eigentlich nur den Part ergänzen, der das Einfügen im Tabellenblatt "Historie" erledigt. Das übersteigt aber meine Kenntnisse bei weitem:



Sub Übertrag_PWZ()

Windows("Briefmarken.xlsm").Activate
Sheets("Bestand").Select
ActiveSheet.Unprotect Password:="xxx"
Range("j2:j17").Select
Selection.Copy
Range("D2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False '-----> (Das hier Kopierte will ich später im Blatt "Historie" einfügen)
ActiveSheet.Protect Password:="xxx"

'-----------------------------------------------------------------
' Bis hierhin war das Originalcode, der auch funktioniert. Jetzt kommt mein Teil...

Sheets("Historie").Select
spalte = ActiveSheet.UsedRange.Columns.Count ' findet die letzte verwendete Zeile im Blatt
Cells(spalte + 1, 1).Select
Selection.Paste

' Ab hier wieder Originalcode
'----------------------------------------------------------------

Sheets("Rechner").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "0"
Range("A2").Select
ActiveCell.FormulaR1C1 = "0"
Range("A3").Select
ActiveCell.FormulaR1C1 = "0"
Range("A4").Select
ActiveCell.FormulaR1C1 = "0"
Range("A5").Select
ActiveCell.FormulaR1C1 = "0"
Range("A6").Select
ActiveCell.FormulaR1C1 = "0"
Range("A7").Select
ActiveCell.FormulaR1C1 = "0"
Range("A8").Select
ActiveCell.FormulaR1C1 = "0"
Range("A9").Select
ActiveCell.FormulaR1C1 = "0"
Range("A10").Select
ActiveCell.FormulaR1C1 = "0"
Range("A11").Select
ActiveCell.FormulaR1C1 = "0"
Range("A12").Select
ActiveCell.FormulaR1C1 = "0"
Range("A13").Select
ActiveCell.FormulaR1C1 = "0"
Range("A14").Select
ActiveCell.FormulaR1C1 = "0"
Range("A15").Select
ActiveCell.FormulaR1C1 = "0"
Range("A16").Select
ActiveCell.FormulaR1C1 = "0"

ActiveWorkbook.Save

End Sub


Führe ich das Makro so aus, bekomme ich einen Laufzeitfehler '1004', das Debug führt zur Zeile "Selection.PasteSpecial...."
Ich habe schon ein einfaches Selection.Paste probiert, dann kommt Laufzeitfehler 438. Also scheint es zunächst mal am Einfügen zu hängen? Vielleicht kann mir jemand auf die Sprünge helfen...

Gruß
Alex



Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 13:34:06
peter
Hallo

Durch
ActiveSheet.Protect Password:="xxx"
verlierst Du deine "Selection"
Füg diese Zeile vor
Sheets("Rechner").Select
ein.

Es reicht auch
Sheets("Rechner"). Range("A1:16").FormulaR1C1 = "0"

Cells(row,column) daher
Cells(1, spalte + 1).Select

Peter
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 14:17:20
Peter (HPO)
Hallo Allex,

probiermal diesen code:

Sub Übertrag_PWZ()
Dim Spalte As Integer
Spalte = Sheets("Tabelle2").UsedRange.Columns.Count

Windows("Briefmarken.xlsm").Activate
Sheets("Bestand").Unprotect Password:="xxx"

Range("j2:j17").Copy _
Destination:=Range("D2")

Range("j2:j17").Copy _
Destination:=Sheets("Tabelle2").Cells(1, Spalte + 1)

ActiveSheet.Protect Password:="xxx"


With Sheets("Tabelle2")
.Range("A1").FormulaR1C1 = "0"
.Range("A2").FormulaR1C1 = "0"
.Range("A3").FormulaR1C1 = "0"
.Range("A4").FormulaR1C1 = "0"
.Range("A5").FormulaR1C1 = "0"
.Range("A6").FormulaR1C1 = "0"
.Range("A7").FormulaR1C1 = "0"
.Range("A8").FormulaR1C1 = "0"
.Range("A9").FormulaR1C1 = "0"
.Range("A10").FormulaR1C1 = "0"
.Range("A11").FormulaR1C1 = "0"
.Range("A12").FormulaR1C1 = "0"
.Range("A13").FormulaR1C1 = "0"
.Range("A14").FormulaR1C1 = "0"
.Range("A15").FormulaR1C1 = "0"
.Range("A16").FormulaR1C1 = "0"
End With
ActiveWorkbook.Save

End Sub

Ich hoffe du kommst damit zurecht.
Viele Grüße
Peter (hpo)
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 15:03:29
Piet
Hallo

l@Peter - Lieber Forum Kollege, seit Jahren predigen wir Fragern -kein Select- zu verwenden! Bitte beachten.

Ich wundere mich auch immer wieder, warum sich Kollegen so krampfhaft an einem völlig unnötigem Code festklammern, der doch eindeutig eine Makro Recorderaufzeichnung ist. Die kann man doch auf einen besseren Level bereinigen! Nur VBA Grundwissen!!

Den Fehler, das der Code falsch kopiert, sah ich nach 5 Sekunden im Originalcode von sammawarr! Der hat NIE funktioniert!
Man beachte bei Cells(spalte+1, 1) das die Cells Angabe IMMER Cells(z, s) lauter, somit Zeile, Spalte.
Wenn man aber Zeilen mit Spalten vertauscht kann der Coder NIE geklappt haben. Ausser bei der 1. Spalte!

Bitte prüfen ob der bereinigte Code jetzt richtig läuft. Würde mich freuen. Grüsse aus Izmir an die Heimat.

mfg Piet

Sub Übertrag_PWZ()

Dim spalte As Long
Windows("Briefmarken.xlsm").Activate
'findet die letzte verwendete Zeile im Blatt Historie
spalte = Sheets("Historie").UsedRange.Columns.Count

'Bestand nach Historie kopideren (Ohne Protect!)
Sheets("Bestand").Range("J2:J17").Copy
Sheets("Historie").Cells(1, spalte + 1).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False

'----------------------------------------------------------------
Sheets("Rechner").Range("A1:A16").Value = "0"
ActiveWorkbook.Save
End Sub
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 15:38:33
sammawatt
@Piet: Ja das hier ist in der Tat eine Recorderaufzeichnung, aber ich als Laie kann da zumindest schnell erkennen, was da abläuft (ich bin nicht der Ersteller, der ist nicht mehr verfügbar).
Funktioniert hat bisher nur der Code ohne den Abschnitt mit der Historie - dieser hat nie funktioniert, da hast du Recht.
In meinem Recorder-Code klappt es jetzt auch mit Cells(2, Spalte + 1).Select, das war der Fehler (Variante von mir, in Zeile 2 einfügen)

Habe jetzt aber den Code von dir genommen, funktioniert. Das nächste Projekt wird sein, in Zeile 1 das Datum der Eintragung abzuspeichern.

VIelen Dank an alle und insbes. Piet für die Lösung!
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 16:07:26
Piet
Hallo

freut mich das es auf Anhieb klappt, das Datum einfügen, auch kein Problem. Nur diesen Teil ändern!

mfg Piet

    'Bestand nach Historie kopideren  (Ohne Protect!)

Sheets("Bestand").Range("J2:J17").Copy
Sheets("Historie").Cells(2, spalte + 1).PasteSpecial Paste:=xlValues
Sheets("Historie").Cells(1, spalte + 1) = Date
Application.CutCopyMode = False

Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 16:16:46
sammawatt
Habe das mit dem Datum bereits gelöst, danke. (Natürlich viel uneleganter, aber auch hier werde ich das dann noch mal ordentlicher schreiben)
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 14:27:17
Peter (HPO)
Hallo Alex,

bitte bei dem Code die Tabellenblätte anpassen ("Historie und Rechner") ist im code Tabelle2.

Gruß
Peter(hpo)
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 13:51:05
sammawatt
Danke, der Laufzeitfehler ist jetzt weg.

Allerdings wird jetzt auf dem Blatt "Historie" immer in die erste Spalte eingefügt (scheint als wird dort aufsummiert). Ich möchte aber bei jedem Ablauf des Makros eine neue Spalte mit den Daten haben.
Also stimmt das hier wohl nicht:
Sheets("Historie").Select

spalte = ActiveSheet.UsedRange.Columns.Count ' findet die letzte verwendete Spalte im Blatt
Cells(spalte + 1, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False


Ich habe hier eine Bestandsliste, bei Verbrauch wird der Bestand automatisch reduziert. Die einzelnen "Entnahmen" möchte ich so in der Historie genau nachvollziehen können.
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 14:05:56
peter
Hallo

Schreib mal in Zelle A1 im Blatt Historie irgend eine Text, dann sollte es funktionieren.

Um die Tabelle Bestand zu schützen musst Du Sheets("Bestand").Protect Password:="xxx" schreiben.

Peter
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 14:21:31
sammawatt
A1 war tatsächlich leer. Das Makro fügt den kopierten Teil in Spalte A ein, allerdings erst ab der Zeile 2. Also eine Zeile nach unten versetzt.
Dass ich jetzt was in A1 eingetragen habe ändert daran nix.
Die Werte die kopiert sind, werden im Blatt Historie zu den bereits in der Spalte A stehenden Zahlen aufaddiert.
Anzeige
AW: In anderem Blatt in nächste freie Spalte einfügen
25.06.2024 15:24:40
peter
Hallo

Cells(1,spalte + 1).Select und nicht Cells(spalte + 1, 1).Select

Peter
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige