Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1024to1028
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

Laufzeitfehler 1004 - Wo ist der Unterschied

Laufzeitfehler 1004 - Wo ist der Unterschied
22.11.2008 14:28:50
Christoph
Hallo Zusammen,
ich habe bei einer simplen Zeile immer Laufzeitfehler 1004 bekommen. Zwar konnte ich durch Aenderung das Problem umgehen, jedoch wollte ich einfach mal verstehen was schief laeuft und habe das Problem mal systematisch vereinfacht. Hier nun das Resultat:
  • 
    Sub Test()
    Sheets("Sheet1").Range("A1:A10").Copy _
    Sheets("Sheet2").Range("A1")
    Sheets("Sheet1").Range(Cells(1, 1), Cells(1, 10)).Copy _
    Sheets("Sheet2").Range("A1")
    End Sub
    


  • Eigentlich ein trivialer Code. Beide Anweisungen sollten das selbe tun. Tun sie auch, wenn Sheet1 aktiviert ist. Wenn jedoch ein anderes TB aktiviert ist, kommt bei der zweiten Anweisung die Fehlermeldung 1004. Woran liegt das? Habt ihr eine Ahnung?
    Danke und Gruesse,
    Christoph

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Laufzeitfehler 1004 - Wo ist der Unterschied
    22.11.2008 15:00:00
    Daniel
    Hi
    der grund ist folgender:
    die Vollständige Referenzierung für eine Zelle ist immer:
    APPLICATION(Excel).WORKBOOKS("Mappe1.xls").SHEETS("Tabelle1").RANGE("A1")
    bzw
    APPLICATION(Excel).WORKBOOKS("Mappe1.xls").SHEETS("Tabelle1").CELLS(1,1)
    wird jetzt in dieser Kette was wegelassen, so ergänzt Exel automatisch immer die Werte des gerade Aktiven Tabellenblatts.*
    Wenn jetzt allerdings z.B. Sheet2 aktiv ist, dann bezieht sich in der Zeile:
    
    Sheets("Sheet1").Range(Cells(1, 1), Cells(1, 10)).Copy
    


    die Range auf Sheet1, die Cells, mit denen die Range definiert werden soll aber auf Sheet2, weil dieses aktiv ist, und damit ist es nicht mehr eindeutig und es kommt zum Fehler.
    um das Problem zu umgehen, müsste man die Zeile so formulieren:

    
    Sheets("Sheet1").Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(1, 10)).Copy
    


    allerdings darf man jetzt die Sheetangabe vor dem RANGE weglassen:

    
    Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(1, 10)).Copy
    


    oder man arbeitet zur weiteren vereinfachung mit der WITH-Klammer:

    
    With Sheets("Sheet1")
    Range(.Cells(1, 1), .Cells(1, 10)).Copy
    End With
    


    oder man vergrössert den Zellbereich mit der Resize-Funktion:

    
    Sheets("Sheet1").Cells(1, 1).Resize(10,1).Copy
    


    Gruß, Daniel
    *dies gilt, wenn der Code in einem allgemeinen Modul steht.
    Steht der Code im Modul eines Tabellenblatts, so werden die Daten dieses Tabellenblatts ergänzt.

    Anzeige
    AW: Laufzeitfehler 1004 - Wo ist der Unterschied
    22.11.2008 15:00:00
    Original
    
    Sub so()
    With Sheets("Sheet1")
    .Range(.Cells(1, 1), .Cells(1, 10)).Copy Sheets("Sheet2").Range("A1")
    End With
    End Sub
    


    Lies dazu die Hilfe zu Cells
    mfg Kurt

    AW: Laufzeitfehler 1004 - Wo ist der Unterschied
    22.11.2008 15:24:00
    Christoph
    Hallo ihr Beiden,
    vielen Dank fuer eure Antworten. Gerade durch deine Erklaerung, Daniel, habe ich es jetzt verstanden. Macht Sinn und ich kann nachts wieder ruhig schlafen ;-)
    Gruesse Christoph

    299 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige