die methode range für das objekt _worksheet ist fehlgeschlagen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ereza.

    die methode range für das objekt _worksheet ist fehlgeschlagen

    Hallo liebe Community...

    Sieht einer von euch auf die Schnelle, wo ich da einen Synthaxfehler habe... bzw. warum mir der Compiler bei der Zeile:

    Visual Basic-Quellcode

    1. Tabelle9.Range(Cells(AnfangBestellungen, 1), Cells(1048576, 77)).ClearContents



    einen Fehler schmeißt??

    Das Tabellenblatt heißt intern Tabelle9 - also an dem kanns auch nit liegen....

    und...

    Visual Basic-Quellcode

    1. 'Sheets("9 - Daten IH").Range(Cells(AnfangBestellungen, 1), Cells(1048576, 77)).ClearContents


    funktioniert auch nicht.... :(


    Also.. .das ist mein CODE:


    Visual Basic-Quellcode

    1. Private Sub Button_Schritt_3_Click()
    2. Dim AnfangBestellungen As Long
    3. AnfangBestellungen = Tabelle9.Cells(Rows.Count, 15).End(xlUp).Row + 1
    4. 'Sheets("9 - Daten IH").Range(Cells(AnfangBestellungen, 1), Cells(1048576, 77)).ClearContents
    5. Tabelle9.Range(Cells(AnfangBestellungen, 1), Cells(1048576, 77)).ClearContents
    6. InsertIntoTable2
    7. End Sub



    Kann mir da jemand weiterhelfen?

    Vielen Dank!

    LG Tim
    Wenn der Code nicht in Tabelle9, sondern in einem anderen Sheet oder in einem Modul steht, musst du das entsprechende Objekt jedes Mal adressieren, wenn du auf eine seiner Properties zugreift.
    Tabelle9.Range(Tabelle9.Cells(AnfangBestellungen, 1), Tabelle9.Cells(1048576, 77)).ClearContents

    Deshalb geht man so etwas objektorientiert an.
    In Tabelle9:

    Visual Basic-Quellcode

    1. Sub Cleanup
    2. Range(AnfangBestellungen & ":" & Rows.Count).ClearContents
    3. End Sub

    Und als Aufruf von irgendwo:
    Tabelle9.Cleanup

    Nachtrag:
    Im übrigen würde ich wo immer möglich Anstatt .ClearContents die ganzen Zeilen löschen mit .​Delete xlup
    Das spart unheimlich Berechnungs- und Disk-Ressourcen.
    Eine gelöschte Zeile verschwindet nämlich aus dem ​UsedRange
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    aaahhh so ist das also!!

    der objektorientierte Ansatz ist ja wirklich klever...!! an das hab ich gar nicht gedacht... dass das überhaupt geht... SUPER!!

    Jedoch... hätte ich beim objektorientierten Ansatz doch noch eine Verständnisfrage....:

    Mit "Rows.Count" wird dann ja die Zeile gezählt... aber woher weiß Excel dann dass es die Zeile von der gleichen Spalte wie, ich nehme an, von "AnfangBestellungen", hernehmen muss?? Weil da wird ja nur gesagt: "zähle Zeilen...."
    Kannst du mir das noch bitte kurz erklären, damit ich das besser verstehe...?

    Vielen Dank!

    VG Tim

    ereza schrieb:

    "Rows.Count"
    ist die Anzahl der Zeilen im Worksheet.
    Das ist eine quasi-Konstante, die bei Excel 2010 immer bei 1048576 liegt.
    Excel 2003 hatte noch 65535 und zukünftige Versionen mögen höher liegen.

    Er löscht also alle Zeilen von AnfangBestellungen bis 1048576.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --