Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA - kop. Spalte in nächste freie Spa.
09.07.2020 07:42:12
Stephan
Hallo zusammen,
nachdem ich mich gestern diesbüglich gefühlt durch das halbe Netz gelesen habe und bei vorherigen Fragestellungen in diesem Forum immer antworten gefunden habe, musste ich mich nun doch hier anmelden und bei meiner Problemstellung explizit nachfragen.
Ich möchte aus einer Tabelle die Spalten A-J in die nächste freie Spalte kopieren mittels VBA-Befehel. Nun bin ich diesbüglich leider blutiger Anfänger (seit gestern :-) ).
Mein bisheriger Code sieht so aus:
 Sub neue_KW_in_Übersicht_erstellen2()
' neue_KW_in_Übersicht_erstellen Makro
strKWW = InputBox("Bitte die KW angeben, für die eine neue Liste erstellt werden soll, z.B. '14' _
.")
Sheets("Übersicht").Unprotect ("1604")
Sheets("Übersicht").Select
' wählt das richtige Tabellenblatt aus
Columns("A:J").Select
' wählt den zu kopierenden Bereich aus
Selection.Copy
' kopiert den entsprechenden Bereich
Sheets("Übersicht").Cells(1, UsedRange.Columns.Count).Paste
' soll (und ich denke hier ist der Fehler irgendwo) die nächste freie Spalte finden und die  _
kopierten Spalten A-J einfügen
Selection.Replace What:="28", Replacement:=strKWW, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Sheets("Übersicht").Protect ("1604")
Sheets("Admin-Tools").Select
End Sub
Kann mir bitte jemand die richtige Programmzeile aufschreiben? So viel ich auch lese, ich verstehe gefühlt immer weniger. :/
Vorab schonmal danke für die Hilfe!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 08:32:35
MCO
Guten Morgen, Rookie ;-)
Dann wollen wir Deiner Verwirrung mal ein paar weitere rätselhafte Zeilen hinzufügen:
 Sub neue_KW_in_Übersicht_erstellen2()
' neue_KW_in_Übersicht_erstellen Makro
Dim bereich_copy As Range, rng As Range
strKWW = InputBox("Bitte die KW angeben, für die eine neue Liste erstellt werden soll, z.B.  _
'14'.")
With Sheets("Übersicht")
.Unprotect ("1604")
Set bereich_copy = .Columns("A:J")
Set rng = .Cells(1, 1).End(xlToRight).Offset(, 1) 'Erste freie spalte in zeile 1
bereich_copy.Copy rng 'Kopieren + Einfügen
Set rng = rng.Resize(bereich_copy.Rows.Count, bereich_copy.Columns.Count)
rng.Replace What:="28", Replacement:=strKWW, LookAt:=xlPart
.Protect ("1604")
End With
Sheets("Admin-Tools").Select
End Sub
Das einfache kopieren von Bereichen kannst du in 1 Zeile setzen: kopier von ... nach...
Viel Erfolg!
Gruß, MCO
Anzeige
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 09:31:32
Stephan
Vielen Dank für die schnelle Antwort, MCO. Tatsächlich habe ich deinen Code auch noch nicht zu 100% verstanden, jedoch habe ich mir vorgenommen mich in das Thema ohnehin weiter einzuarbeiten, da es unglaublich viele Möglichkeiten eröffnet.
Das blinde Kopieren deines Codes führt bei Ausführung führt dies zu einer Fehlermeldung:
Fehler beim Kompilieren:
Syntaxfehler
Wo liegt der Fehler?
Mit ist aufgefallen, dass der Code noch einer Änderung im Generellen bedarf: Es muss eine Spalte frei gelassen werden, da Spalte "J" nur eingefärbt, jedoch nicht mit Inhalt belegt ist. Ich denke, dass dies wie folgt möglich ist?

Set rng = .Cells(1, 1).End(xlToRight).Offset(, 2) 'statt Offset(, 1)

Anzeige
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 09:40:13
MCO
Hallo Stephan!
Offset (,1) auf Offset(,2) zu ändern ist korrekt :-)
Deinen Syntaxfehler kann ich nicht nachvollziehen, bei mir lief alles wie gewünscht.
Du solltest in dem Excel-Code auf jeden Fall unnötige Zeilenumbrüche entfernen, die im Posting leider mit gesetzt werden. (z.B. bei deiner INput-Box)
Deine Fragen kannst du natürlich weiter gern im Forum stellen oder einfach googeln.
Gruß, MCO
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 11:27:50
Stephan
Der Syntaxfehler kam tatsächlich durch einen Zeilenumbruch zustande. Dieses Problem ist gelöst :)
Aber der Codes funktioniert noch immer nicht, wie er soll. Er soll mehrfach ausgeführt werden können, sodass die Spalten "A-J" immer rechts vom bestehenden Teil angehängt werden, das Tabellenblatt "Übersicht" also immer breiter wird.
Ein Problem mit der Umstellung auf "Offset (, 2)" ist, dass J1 noch immer leer ist und somit jedes Mal aufs Neue als 1. leere Spalte identifiziert werden würde, sodass die Spalte K befüllt werden würde. Meine Lösung: Ausgelesen wird ja, ob die Zelle in Zeile 1 leer ist. Nun habe ich einen Wert in die farblich markierte Spalte J gelegt (J1="1"), sodass die erste freie Spalte = K ist. Somit sollte dein ursprünglicher Code wieder funktionieren.
Wenn ich diesen nun jedoch ausführe, setzt er den kopierten Bereich immer in Spalte K ein, was ab der zweiten Code-Ausführung keinen Sinn mehr macht.
Ich habe beispielhaft mal eine Datei angehängt.
https://www.herber.de/bbs/user/138896.xlsm

Anzeige
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 13:34:37
MCO
Hallo Stephan!
Mein Vorschlag:
Nimm nicht die nächste freie Zelle von Links aus, sondern die letzte belegte Zelle von rechts aus:
Set rng = .Cells(1, .columns.count).End(xlToleft).Offset(, 1) 'Erste freie spalte in zeile 1
Gruß, MCO
AW: VBA - kop. Spalte in nächste freie Spa.
09.07.2020 14:09:05
Stephan
Es funktioniert! Vielen, vielen Dank, MCO! Du hast mir den Tag und die anstehenden Wochen gerettet! :)
Ich gebe dir mal eine virtuelle Kanne Kaffee aus! Danke für deine Geduld und ausführliche Hilfe!

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige