_Excel_RangeDelete bricht mit ErrorCode 2 ab?

  • Hallo zusammen,

    irgendwie kann ich zwar spalten löschen, jedoch keine komplette Zeile...
    Zur Erklärung, ich würde gerne, wenn in der Spalte F eine Artikel-Nr größer 9 Zeichen vorkommt, diese entsprechende komplette Zeile entfernen... jedoch bekomme ich immer den Error Code 2.

    könnte da mal einer bitte drüber schauen? Excel-Datei hängt ebenfalls (als ZIP aufgrund der hier erlaubten Dateiendung) an...

    Spoiler anzeigen
  • Hallo @Sonderbaar,

    es genügt die kleine Änderung:

    AutoIt
    ; Von:
    _Excel_RangeDelete($workbook.Worksheets(1), '"' & $i & ":" & $i & '"')
    
    
    ; Zu:
    _Excel_RangeDelete($workbook.Worksheets(1), $i & ":" & $i)

    Grüße autoiter

  • Hallo @autoiter,

    das Abändern des Codes hat scheinbar das Problem gelöst, dass ich vorher nicht löschen konnte... danke!
    Da baut man es so auf, wie in der Hilfe zu sehen, funzt es nicht... naja kann man nix machen... hauptsache funzt...

    Macht es Sinn das durchsuchen der Spalte ander zu gestalten?
    Leider werden nur zwei der Beispieleeinträge gelöscht... ich vermute, durch das Löschen des Datensatzes ist die Schleife dann zu hoch...
    oder ich muss $i -1 setzen wenn ein Datensatz gelöscht wurde...

    EDIT: habe $i -1 gesetzt! Trotzdem danke, vorher hätte ich ja nix weg gelöscht

    Einmal editiert, zuletzt von Sonderbaar (5. Mai 2017 um 07:31)

  • Hallo @Sonderbaar,

    Da baut man es so auf, wie in der Hilfe zu sehen, funzt es nicht... naja kann man nix machen... hauptsache funzt...

    Man markiert Strings im AutoIt Quelltext mit den Anführungszeichen. Eine Variable damit zu umgeben ist meist Unsinn oder jedenfalls nicht notwendig. Der einzige Fall ist glaube ich beim Bauen eines Befehls, den man an die Konsole übergeben will.

    Macht es Sinn das durchsuchen der Spalte ander zu gestalten?
    Leider werden nur zwei der Beispieleeinträge gelöscht... ich vermute, durch das Löschen der Datensatzes ist die Schleife dann zu hoch...
    oder ich muss $i -1 setzen wenn ein Datensatz gelöscht wurde...

    Ich denke man kann das so machen, aber warte mal ab, ob ein Profi dir noch etwas besseres rät. Dein Problem entsteht hier aber nur, weil das Löschen wie bei _ArrayDelete läuft. Nach jedem Löschvorgang werden alle Folgezeilen nach oben geschoben (- die letzten Zeilen waren zur Prüfzeit also einfach nicht mehr vorhanden ). Daher musst du von hinten beginnen und dich nach vorne arbeiten.

    AutoIt
    ; Beginne die Schleife so:
    
    
    For $i = $Zeilenanzahl to 3 Step - 1

    Grüße autoiter

  • Der einzige Fall ist glaube ich beim Bauen eines Befehls, den man an die Konsole übergeben will.

    Dies ist der Fall, wenn Parameter Leerzeichen oder Sonderzeichen enthalten, die anderfalls von der Konsole interpretiert werden. Bei SQLite ist es auch oft nötig...

    Hier einer dieser klassischen Fälle, welcher mir damals viel Kopfschmerzen bereitet hatte. :D

    Quotes.png

    Einmal editiert, zuletzt von Bitnugger (5. Mai 2017 um 08:52)

  • Hey @Bitnugger,
    Tatsächlich ein ekelhaftes Vieh. Wieder ein schöner Einsatz von StringFormat. Ich hätte direkt aufgegeben, wenn ich gesehen hätte, dass ich sowohl Hochkommas als auch Anführungszeichen in der Konsolenausgabe brauche. :D

    Grüße autoiter