Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1660to1664
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
Inhaltsverzeichnis

Copieren mit Range funktioniert nicht

Copieren mit Range funktioniert nicht
18.12.2018 15:02:14
Oliver
Hallo liebes Forum,
ich habe mal wieder ein Problem.
Ich möchte gerne aus einer geöffneten Arbeitsmappe einen bestimmten Bereich in eine andere Arbeitsmappe kopieren.
Dazu habe ich folgenden Code: (Das ist nur der Ausschnitt einer I-Schleife, da ich das ganze für viele Workbooks mache.

Workbooks(Projectfile(n)).Sheets(ProjectTab).Range(Cells(5, 35), Cells(10, 35)).Copy
Workbooks(Targetfile).Sheets(TargetfileTab).Range(Cells(5, 35), Cells(10, 35)).PasteSpecial  _
xlPasteValues

Ich möchte das gerne mit der Range machen, da ich später die Spalte im "TargetTab" suchen möchte - soll "rechts neben die letzte gefüllte Spalte" gepasted werden.
Als Fehler gibt er mir nur ein
" Anwendungs- oder objetdefinierter Fehler "
Wäre für Hilfe sehr dankbar. Ich hoffe die Infos reichen.
Danke
Oliver

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

Betreff
Datum
Anwender
Anzeige
Kopieren mit Range
18.12.2018 15:10:59
Beverly
Hi Oliver,
da der zu kopierende Bereich fix ist, sollte es so korrekt sein: (ungetestet)
Workbooks(Projectfile(n)).Sheets(ProjectTab).Range("AI5:AI10").Copy
Workbooks(Targetfile).Sheets(TargetfileTab).Range("AI5").PasteSpecial _
xlPasteValues


AW: Kopieren mit Range
18.12.2018 15:19:08
Oliver
Hallo Beverly,
danke dir für die schnelle Antwort.
So hatte ich das auch schon Aber:
Wie würde ich in diesem Fall die letzte beschrieben Spalte kommen?
Ich habe eine die letzte Spalte eben nur als Zahl:
leereSpalte = Workbooks(Targetfile).Sheets(TargetfileTab).Cells(10, Columns.Count).End(xlToLeft).Column
Ich dachte eben, ich könnte das dann so machen:
….Workbooks(Targetfile).Sheets(TargetfileTab).Range(Cells(5, leereSpalte).PasteSpecial  _
xlPasteValues
Hast du da vielleicht noch einen Tipp?
Vielen Dank
Oli
Anzeige
AW: Kopieren mit Range
18.12.2018 15:24:20
Oliver
Hallo nochmal!
Nun klappt es!
Danke dir Beverly du hast mich auf den richtigen Pfad gebracht!!
Ich hab es jetzt so gebaut und es funktioniert:
leereSpalte = Workbooks(Targetfile).Sheets(TargetfileTab).Cells(10, Columns.Count).End(xlToLeft) _
.Column + 1
Workbooks(Projectfile(n)).Sheets(ProjectTab).Range("AI5:AI10").Copy
Workbooks(Targetfile).Sheets(TargetfileTab).Cells(5, leereSpalte).PasteSpecial xlPasteValues

So klappt das bestens.
Ich danke vielmals!!
Viele Grüße
Oliver
AW: Kopieren mit Range
18.12.2018 15:26:22
Beverly
Hi Oliver,
weshalb .Range(Cells(5, letzteSpalte))? Entweder .Range("AI5") wenn die Zieladresse fix ist oder einfach .Cells(5, letzteSpalte) wenn sie variabel sein soll. Beim Einfügen reicht es, nur die Adresse der ersten Zelle des Zielbereichs anzugeben (im Gegensatz zum Kopieren).


Anzeige
AW: Copieren mit Range funktioniert nicht
18.12.2018 15:33:32
Christoph
Moin Oliver,
darüber habe ich mir auch schon des öfteren den Kopf zerbrochen.^^
Ich meine es liegt daran, dass du auch die Cells in Range noch einem Ort zuordnen musst. Also statt:
Range(Cells(5, 35), Cells(10, 35))
besser (Achtung, so liest es sich noch sehr blöd)
Workbooks(Projectfile(n)).Sheets(ProjectTab).Range(Workbooks(Projectfile(n)).Sheets(ProjectTab).Cells(5, 35), Workbooks(Projectfile(n)).Sheets(ProjectTab).Cells(10, 35))
Wenn du den Blätter mit denen du arbeitest einfach ein Kürzel gibts, dann geht das auch immer recht schnell.
Etwa
dim wsPf as Worksheet
dim wsTf as Worksheet
Set wsPF = Sheets(ProjectTab)
Set wsTf = Sheets(TargetfileTab)
dann kannste entsprechend:
wsPF.Range(wsPF.Cells(5, 35), wsPF.Cells(10, 35))
schreiben. Das Workbook wird (soweit ich weiß) automatisch mit-hinterlegt, wenn du ein Worksheet so definierst. Musste also nicht noch extra davorschreiben.
Bin selbst noch relativer Anfänger, aber ich denke das sollte dein Problem beheben.
Grüße Christoph
Anzeige
AW: Copieren mit Range funktioniert nicht
18.12.2018 15:48:01
Daniel
Hi
wenn du eine Range mit (Cells(), Cells()) beschreibst, muss die Definition von Workbook und Worksheet vor den beiden Cells innerhalb von Range() stehen und nicht nur vor der Range.
Vor der Range kann es sogar entfallen, außer der Code steht in einem Tabellenblattmodul, dann muss diese Angabe vor Range und vor den beiden Cells stehen !
daher sollte man das Konstrukt Range(Cells(), Cells()) vermeiden, wenn man mit mehreren Workbooks und Worksheets arbeitet, da die Ausdrücke sonst sehr lang werden, wenn "Workbooks(Projectfile(n)).Sheets(ProjectTab)." 3x in der Programmzeile aufgeführt werden muss
hierzu wurden ja schon Ansätze gezeigt:
- bei .PasteSpecial reicht es aus, die linke obere Zelle anzugeben, so dass folgendes ausreicht:
Workbooks(Targetfile).Sheets(TargetfileTab).Cells(5, 35).PasteSpecial xlpasteall
- musst du einen größeren Zellbereich angeben, dann besser wie gezeigt bei fixer größer über Range(Adressstring) oder mit Resize:
Workbooks(Projectfile(n)).Sheets(ProjectTab).Cells(5, 35).Resize(6, 1).Copy
möchte man bei Range(Cells, Cells) bleiben, kann man mit der WITH-Klammer arbeiten.
in der WITH-Klammer definiert man ein Objekt in der Kopfzeile, wenn man dieses Objekt verwenden will, stellt man einfach den Punkt an den Anfang
With Workbooks(Projectfile(n)).Sheets(ProjectTab)
.Range(.Cells(5, 35), .Cells(10, 35)).Copy
Workbooks(Targetfile).Sheets(TargetfileTab).Cells(5, 35).PasteSpecial xlPasteValues
End with
oder man arbeitet mit Variablen, um den Code übersichtlich zu halten:
dim shQuelle as Worksheet
dim shZiel as worksheet
set shQuelle = Workbooks(Projectfile(n)).Sheets(ProjectTab)
set shZiel = Workbooks(Targetfile).Sheets(TargetfileTab)
Range(shQuelle.Cells(5, 35), shQuelle.Cells(10, 35)).Copy
shZiel.Cells(5, 35).PasteSpecial xlpastevalues
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige