Microsoft Excel

Herbers Excel/VBA-Archiv

range(cells(),cells()) copy paste

Betrifft: range(cells(),cells()) copy paste von: Daniel
Geschrieben am: 15.08.2014 08:40:14

Hallo zusammen,
Ich weiss, dass zu diesem Thema schon viel geschrieben wurde, trotzdem lässt sich (selbst nach stundenlangen Suchen) der folgende "Fehler" nicht beheben:

Ziel: Ich möchte aus einem Excel Sheet ("ThisWorlbook") drei verschiedenen Tabellen in ein neues Workbook ("ActiveWorkbook") hineinkopieren und dann ein pdf File erstellen.

Problem:

Sub ExcelToPDF()
'Variablen
Dim k, i As Integer 'zeigt an wo bzw. welcher Teil der Tabelle ins "erschaffene" Workbook  _
hineinkopiert werden soll
'Neue Datei erstellen
Workbooks.Add
'Bereich in neue Datei kopieren
ThisWorkbook.Sheets("DNEL Results").Range("B3:G24").Copy Range("A3") 'Kommentar: funktionier  _
problemlos

ThisWorkbook.Sheets("DNEL Results").Range(Sheets("DNEL Results").Cells(3, 2), Sheets("DNEL  _
Results").Cells(60*i, 2)).Copy ActiveWorkbook.Sheets("Tabelle1").Range(Sheets("Tabelle1").Cells(60 * k, 1))
Fehleranzeige 1: "Anwendungs- oder objektorientierter Fehler"
'oder 
ThisWorkbook.Sheets("DNEL Results").Range(Sheets("DNEL Results").Cells(3, 2), Sheets("DNEL  _
Results").Cells(60*i, 2)).Copy 
ActiveWorkbook.Sheets("Tabelle1").Range(Sheets("Tabelle1").Cells(60 * k, 1)).PasteSpecial  _
xlPasteAll
Fehleranzeige 2:"Index ausserhalb des gültigen Bereichs": Beim Debuggen zeigt es den  _
ThisWorkbook...-Teil an.
[...]
End Sub
Könnt Ihr mir helfen? Dies scheint ein verzwicktes Problem zu sein.

Ich danke für Eure Hilfe,

Liebe Grüsse,

Daniel

  

Betrifft: AW: range(cells(),cells()) copy paste von: Daniel
Geschrieben am: 15.08.2014 09:13:14

Hi

Was für Sheets gilt, gilt auch für Workbooks:
Wenn die Angabe des Workbook fehlt, setzt VBA immer das ActivewWorkbook ein.
Und die Range selbst muss immer im selben Workbook liegen wie die Zellen die sie definieren, sonst gibt es den Fehler.
Kleiner Tipp in diesem Zusammenhang:
Wenn der Code in einem allgemeinen Modul steht, dann kann man die Angabe von Workbook und Sheet VOR der Range weglassen, diese ist nur vor den Celle innerhalb erforderlich..


Laufzeitfehler 9 weist in diesem Zusammenhang auf einen falsch geschriebenen Workbook- oder Sheetnamen hin.


Wenn du wie beim einfügen nur eine Zelle angibt, dann lässt man das Range weg und gibt direkt das Cells an:
ActiveWorkbook.Sheets("Tabelle1").Cells(60 * k, 1).PasteSpecial xlPasteAll

Gruß Daniel


  

Betrifft: AW: range(cells(),cells()) copy paste von: Daniel
Geschrieben am: 15.08.2014 09:32:03

Hallo Daniel,

Danke für die rasche Antwort.

Leider funktioniert der Code immer noch nicht:
Ich kopiere aus einem Workbook mit dem Namen "New Values" (wird auch als ThisWorkbook erkannt, das entsprechende Sheet im Workbook heisst "DNEL Results") eine Tabelle, die ich dann in ein anderes vom Code kreirten Workbook (als ActiveWorkbook erkannt, habe ich getestet) hineinkopiere.
Wenn ich das so hinschreibe:
ThisWorkbook.Sheets("DNEL Results").Range(Sheets("DNEL Results").Cells(3, 2), Sheets("DNEL Results").Cells(10, 5)).Copy

gibt es mir an dieser Stelle eine Fehleranzeige: "Index ausserhalb des gültigen Bereichs" (Laufzeitfehler 9).

Ich sehe weder einen Syntax- noch einen Schreibfehler. Weisst Du um was es sich handeln könnte?

ich danke nochmals für Deine Hilfe.

Daniel


  

Betrifft: AW: range(cells(),cells()) copy paste von: Daniel
Geschrieben am: 15.08.2014 10:27:18

Hi
hast du meinen Beitrag nicht gelesen?
da habe ich dir doch im ersten Satz erklärt, wo der Fehler liegt
oder schreibe ich so unverständlich?

aber ich wiederhole es noch mal für dich:
Wenn du bei einem Zellbezug kein Workbook angibst, setzt Excel das aktive Workbook ein:

Aus:
ThisWorkbook.Sheets("DNEL Results").Range(Sheets("DNEL Results").Cells(3, 2), Sheets("DNEL Results").Cells(10, 5)).Copy

macht VBA dann:
ThisWorkbook.Sheets("DNEL Results").Range(ActiveWorkbook.Sheets("DNEL Results").Cells(3, 2), AcitveWorkbook.Sheets("DNEL Results").Cells(10, 5)).Copy


deswegen schrieb ich dir, dass du das Workbook auch vor den beiden Cells innerhalb der Range angeben musst:
ThisWorkbook.Sheets("DNEL Results").Range(ThisWorkbook.Sheets("DNEL Results").Cells(3, 2), ThisWorkbook.Sheets("DNEL Results").Cells(10, 5)).Copy

du darfst aber das Workbook und Sheet VOR der Range weglassen, wenn der code in einem allgemeinen Modul steht:
Range(ThisWorkbook.Sheets("DNEL Results").Cells(3, 2), ThisWorkbook.Sheets("DNEL Results").Cells(10, 5)).Copy

Gruß Daniel


  

Betrifft: nicht aktualisiert von: Erich G.
Geschrieben am: 15.08.2014 10:47:39

Hi Daniel (diesmal der Antworter),
sorry, deine neuerliche Antwort hatte ich nicht rechtzeitig gesehen, F5 hat gefehlt...

Na ja, vielleicht hält doppelt ja besser. :-)

Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende allerseits!


  

Betrifft: AW: nicht aktualisiert von: Daniel
Geschrieben am: 15.08.2014 11:35:28

Hallo Daniel,

Danke auch für Deine Rückmeldung. Das hat nun funktioniert. Ist manchmal tricky, alle diese Eingaben korrekt durchzuführen.

Ich wünsche auch Dir ein schönes Wochenden.

Liebe Grüsse,

Daniel


  

Betrifft: AW: range(cells(),cells()) copy paste von: Daniel
Geschrieben am: 15.08.2014 10:50:59

Hallo Daniel,

Ich habe Deinen Beitrag gelsen, nur nicht verstanden, dass in den Klammern noch ThisWorkbook stehen muss. Jetzt läuft das Programm und dafür danke ich Dir herzlich :-)

Ich wünsche Dir ein schönes Wochendene,

Daniel


  

Betrifft: richtig referenzieren von: Erich G.
Geschrieben am: 15.08.2014 10:42:40

Hi Daniel (der Fragesteller...),
der andere Daniel hatte schon geschrieben:
"Wenn die Angabe des Workbook fehlt, setzt VBA immer das ActiveWorkbook ein."
(immer: wenn der Code in einem allg. Modul steht - das nur am Rande)

Wenn du schreibst
ThisWorkbook.Sheets("DNEL").Range(Sheets("DNEL").Cells(3, 2), _
   Sheets("DNEL").Cells(10, 5)).Copy
dann ist das ausführlich
ThisWorkbook.Sheets("DNEL").Range(ActiveWorkbook.Sheets("DNEL").Cells(3, 2), _
   ActiveWorkbook.Sheets("DNEL").Cells(10, 5)).Copy

Du willst aber
ThisWorkbook.Sheets("DNEL").Range(ThisWorkbook.Sheets("DNEL").Cells(3, 2), _
   ThisWorkbook.Sheets("DNEL").Cells(10, 5)).Copy

oder kürzer
With ThisWorkbook.Sheets("DNEL")
   .Range(.Cells(3, 2), .Cells(10, 5)).Copy
End With

Der Fehler 9 ergibt sich daraus, dass es im (neuen) ActiveWorkbook natürlich kein Blatt DNEL... gibt.

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich