Microsoft Excel

Herbers Excel/VBA-Archiv

Copy-Paste wirft Fehlermeldung aus

Betrifft: Copy-Paste wirft Fehlermeldung aus von: Sebastian
Geschrieben am: 22.10.2014 23:13:53

Hallo in die Runde

Ich möchte aus einem Tabellenblatt Daten eines Bereichs (zwei Spalten) auswählen und in ein anderes Tabellenblatt kopieren.
Dazu wird in der Tabelle "ÜL" zunächst geprüft, wie viele Einträge vorhanden sind und anschließend der Bereich mit Einträgen von oben links (also quasi Zelle A2) bis unten rechts (Anzahl der Zeilen mit Einträgen, Spalte 2) kopiert.
Dieser Inhalt soll nun im Tabellenblatt "Druckdaten" ab der Zelle 5,3 (C5) eingefügt werden.
Dazu mein Quellcode:

i=2
Do Until Worksheets("ÜL").Cells(i, 1) <> ""
i = i + 1
Loop
Worksheets("ÜL").Range(Cells(2, 1), Cells(i, 2)).Copy (Worksheets("Druckdaten").Range(Cells(5, 2)))

-----

Ausgeführt ergibt dies immer Laufzeitfehler 1004, aber WO liegt der Fehler? :(

Ich freue mich über hilfreiche Hinweise und danke bereits jetzt :)

Gruß
Sebastian

  

Betrifft: 2 Fehler von: {Boris}
Geschrieben am: 22.10.2014 23:25:22

Hi Sebastian,

abgesehen davon, dass Deine Do-Loop-Schleife die langsamste aller Möglichkeiten ist, möchtest Du doch die letzte (lückenlos) gefüllte Zelle in Spalte A des Blattes ÜL ermitteln.
Da Du auf ungleich "" prüfst, musst Du Until durch While ersetzen.

Dein Fehler kommt aber von der Anweisung Range(Cells(5, 2)). Entweder schreibst Du Range("B5") oder Cells(5,2) - aber keinesfalls Dein Konstrukt ;-)

VG, Boris


  

Betrifft: AW: 2 Fehler von: Sebastian
Geschrieben am: 23.10.2014 02:07:54

Hallo Boris

Vielen Dank für deine Antwort.
Leider führen beide von Dir angeführten Möglichkeiten zum gleichen Fehler (Laufzeitfehler 1004).

Wenn ich jeder Zelle manuell den Wert der anderen zuweise, dann funktioniert es - aber nicht mittels copy :(

Weitere Tipps?

Gruß
Sebastian

PS: Wenn meine Do-Loop-Variante so langsam ist - wie wäre es denn schneller oder besser? ;) (Auch hier bin ich für nützliche Tipps dankbar.)


  

Betrifft: AW: 2 Fehler von: Sebastian
Geschrieben am: 23.10.2014 02:16:11

Ausprobiert und Lösung gefunden!

Der Code
Worksheets("ÜL").Range(Cells(2, 1), Cells(i - 1, 2)).Copy (Worksheets("Druckdaten").Cells(5, 2))
funktioniert nicht und führt zur besagten Fehlermeldung.

Die Abwandlung
Worksheets("ÜL").Select
Range(Cells(2, 1), Cells(i - 1, 2)).Copy (Worksheets("Druckdaten").Cells(5, 2))
hingegen funktioniert.

Es muss scheinbar vorher das Tabellenblatt selektiert werden - mittels Direktansprache funktioniert es nicht.

Somit Problem gelöst, aber den Hinweis auf die schnellere bzw. ordentlichere Methode zur Ermittlung der nächsten freien Zeile hätte ich dennoch gerne noch :)


  

Betrifft: AW: 2 Fehler von: Luschi
Geschrieben am: 23.10.2014 08:14:13

Hallo Sebastian,

und das Gemeine daran ist, das in keiner Vba-Hilfe (Excel 2002 - 2013) auf diesen Umstand hingewiesen wird. Dieser Programmcode läuft übrigens tadellos, wenn man die Kopierprozedur in das Klassenmodul der entsprechenden Tabelle verschiebt - dann ist die Selektiererei nicht erforderlich, auch wenn eine ganz andere Tabelle auf dem Bildschirm aktiv ist.
Beispiel: Im Klassenmodul der Tabelle 'ÜL' ist definiert:

Sub Kopieren()
    Worksheets("xyz").Select  'ja auch das geht!!!
    Worksheets("GÜ").Range(Cells(2, 2), Cells(4, 5)).Copy Worksheets("Druckdaten").Cells(5, 2)
End Sub

Aus einem normalen Modul kann man dann die Routine so starten:
Worksheets("GÜ").Kopieren
Grup von Luschi
aus klein-Paris

PS: wegen der lezten belegten Zelle in einer Zeile siehe hier:
http://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/337-letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln


 

Beiträge aus den Excel-Beispielen zum Thema "Copy-Paste wirft Fehlermeldung aus"