Zeilen in Exceltabelle löschen

  • $c & ":" & $z

    Das war doch schon völlig korrekt (wenigstens, wenn die Inhalte der Variablen stimmen). Die Funktion erwartet einen String wie etwa A1:D8 Den kannst du wie jeden String auch so bauen. Etwa:

    Local $c = "A1", $z = "D8"

    _Excel_RangeRead($oWorkbook, Default, $c & ":" $z)

    Dein Problem im zitierten Beitrag war, dass du vergessen hast den Arbeitsblatt-Parameter anzugeben (der zweite).

    Grüße autoiter

  • Wäre das nicht gleich eine günstige Gelegenheit, Grufti39 auf die StringFormat Notation hinzuweisen ?

    Local $c = "A1", $z = "D8"

    _Excel_RangeRead($oWorkbook, Default, StringFormat("%s:%s", $c, $z))

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Wäre das nicht gleich eine günstige Gelegenheit, Friedhelm39 auf die StringFormat Notation hinzuweisen ?

    Das ist hier in diesem Fall, zumindest ist das meine persönliche Meinung, keine gute Idee.

    Durch die zwei Variablen in dem String ":" dazwischen hat man vom Syntaxhighlighter her (rot - grau - rot) eigentlich eine gute Idee was genau da passiert (Variable, Doppelpunkt, Variable) und wenn ich nun versuche da StringFormat reinzuquetschen bläht sich das ganze nur weiter auf und ich muss zudem noch den Formatierungsstring angeben.

    Das mag sich eigenartig anhören aber so finde ich das meiner Meinung nach einfacher als StringFormat zu nutzen, den Formatierungsstring anzugeben und dann die eigentlichen Variablen.


    Wir versuchen doch nur ein Doppelpunkt zwischen zwei Variablen einzufügen, sollten wir hier die Kirche nicht im Dorf lassen und auf StringFormat verzichten?

    Das hat sicherlich bessere Anwendungsfälle als hier.

    Alternativ könnte man auch ExpandVarStrings nehmen und hätte $c$:$z$ aber ehrlich gesagt finde ich $c & ":" & $z viel besser.

    Aber das ist natürlich nur meine persönliche Meinung, soll jeder es halt so machen wie es ihm/ihr gefällt.

  • Wir versuchen doch nur ein Doppelpunkt zwischen zwei Variablen einzufügen, sollten wir hier die Kirche nicht im Dorf lassen und auf StringFormat verzichten ?

    Da gebe ich Dir, was den vorliegenden Fall anbelangt, natürlich recht - zumindest zu 99% ;).

    Dass sich aber auch bei kurzen 'Stringadditionen' Fehler einschleichen können, haben wir ja gesehen.

    Der Hintergrund für meinen Hinweis ist wohl, dass ich selbst StringFormat lange Zeit nicht die Beachtung geschenkt habe, die sie verdient. Insbesondere Einsteiger dürften vor der Funktion erst mal zurückschrecken, da die Syntax nicht gerade trivial ist.

    Das hat sicherlich bessere Anwendungsfälle als hier.

    100% Zustimmung !

    Grufti39 :

    Du kannst Dir die Variante letztlich aussuchen - korrekt sind sie beide.

    Behalte StringFormat aber ruhig im Hinterkopf, bzw. werfe beizeiten mal einen Blick 'drauf.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Da habe ich wohl nicht präzise genug gefragt. Eure Vorschläge werde ich mir gründlich vornehmen. Aber mein augenblickliches Problem ist die Spaltenadressierung. Beispiel: ich will eine Zelle lesen, von der ich den Spaltenindex und den Zeilenindex in je einer Variable habe. Wie gebe ich den Range an?

    Bei mehreren Zellen oder ganzen Spalten oder Zeilen stehen die Ergebnisse in einem Array. Bei meinen Bemühungen ist das Array immer leer.

    In der Beschreibung der Range-Read-Funktion steht bei Range " Either a range object or an A1 range". Wie formuliere ich ein "range object"?

    Bitte helft mir. Gibt es vielleicht ein Tutorial für die Umstellung von der allten Excel-UDF auf die neue?

    Trostlose Grüße

    Friedhelm39


    b

  • Ein Tutorial zur alten und neuen Excel UDF findest Du im Wiki des engl. Forum: https://www.autoitscript.com/wiki/Excel_UDF.
    Da gibt es dann auch eine genaue Beschreibung, wie Ranges funktionieren: https://www.autoitscript.com/wiki/Excel_Range

    Bei meinen Bemühungen ist das Array immer leer.

    Damit wir dir helfen können, brauchen wir in solchen Fällen IMMER:

    • Den exakten Code so wie Du ihn ausführst
    • Die Werte von @error und @extended nachdem Du eine _Excel* Funktion ausgeführt hast. Die sagen uns, wo es klemmt.
  • Ein Tutorial zur alten und neuen Excel UDF findest Du im Wiki des engl. Forum: https://www.autoitscript.com/wiki/Excel_UDF.
    Da gibt es dann auch eine genaue Beschreibung, wie Ranges funktionieren: https://www.autoitscript.com/wiki/Excel_Range

    Das wiki/Excel_UDF hat mir geholfen. Aber was fehlt und was ich auch sonst nichtgefunden habe, ist eine Range-Lösung ohne Buchstaben. Wie gebe ich die Range an, wenn es um mehrere Zellen einer Zeile geht, also für $iSpalte;$iZeile?

    Was ist Excel COM und wo kann ich darüber etwas nachlesen?

    Das wiki/Excel_UDF gibt für die Umstellung von ExcelSheetActivate an:

    "Replace the function with the following code:

    Code
    $oWorkbook.Sheets(x).Activate ; x can be the number or name of the sheet to be activated

    Ich habe es mit $RC = $oExcelB.Sheets(1).Activate versucht und Autoit ist abgestütrzt.

    "Den exakten Code so wie Du ihn ausführst" kann ich nicht liefern, da ich ihn ja hiermit erfrage.

    Hiermit zunächst mal eine Unterbrechung zum weiteren Testen.

    Grüße

    Friedhelm39

  • Das wiki/Excel_UDF hat mir geholfen. Aber was fehlt und was ich auch sonst nichtgefunden habe, ist eine Range-Lösung ohne Buchstaben. Wie gebe ich die Range an, wenn es um mehrere Zellen einer Zeile geht, also für $iSpalte;$iZeile?

    Gib einfach die Adresse der ersten und die Adresse der letzten Spalte, getrennt durch einen Doppelpunkt an.
    z.B. Zeile 3 von Spalte D bis G löschen: "D3:G3"

  • Hallo Grufti39 !

    Vorab : Ich verwende kein Excel, kann also nur Trockenhilfe anbieten;).

    ( water : Bitte nicht lynchen)

    Das wiki/Excel_UDF hat mir geholfen. Aber was fehlt und was ich auch sonst nichtgefunden habe, ist eine Range-Lösung ohne Buchstaben.

    Möglicherweise hilft Dir die Range.Cells-Eigenschaft weiter :

    Range("A1:D1") entspricht Range(Cells(1, 1),Cells(1, 4))

    Allgemein :

    Excel bietet grundsätzlich zwei Notationen für Zeilen/Spalten an :

    Beschreibung siehe z.B. : https://www.emagenit.com/Functions/exce…rence-style.htm

    Kurzfassung in deutsch :

    A1-Notationen (default) :

    - Angabe der Spalten mittels Buchstaben (A, B, C usw.)

    - Angabe der Zeilen mittels Zahlen (1, 2, 3 usw.)

    - A1 bedeutet also : Spalte(Column) = "A" , Zeile (Row) = "1"

    Beispiele :

    - Einzelne Zeile(Row) : Range("2:2") ; komplette Zeile 2

    - Einzelne Spalte(Column) : Range("C:C") ; komplette Spalte C

    - Bereich : Range("C1:E5") ; Die Zeilen 1 bis 5 der Spalten C bis E

    - Einzelne Zelle : Range("C1:C1")

    R1C1-Notationen :

    Angabe der Zeilen und Spalten mittels Zahlen (Zeilenwert zuerst !!)


    Welche verwendest Du ?

    Die R1C1-Notationen wird lt. water von der neuen Excel-UDF nicht mehr unterstützt. Zur Umrechnung gibt es aber die Funktionen :

    _Excel_ColumnToLetter

    _Excel_ColumnToNumber.

    Quelle :

    https://www.autoitscript.com/forum/topic/17…notation-range/

    Siehe auch :

    Range-Objekt(Excel) : https://docs.microsoft.com/de-de/office/v…nge%28object%29

    Range.Cells-Eigenschaft (Excel) : https://docs.microsoft.com/de-de/office/v…cel.Range.Cells

    Gruß und die Bitte um Nachsicht

    Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Irgendwie schaffe ich es nicht, mein Problem rüber zu bringen. Die Adressen der zu bearbeitenden Zellen werden von meinem Script aus dem Inhalt von jeweils zwei Tabellen ermittelt. Dabei ergeben sich Spalten- und Zeilen-Indizes, also z.B. Zeile 566 bis 587, Spalte. 5.

    _Excel_ColumnToLetter und _Excel_ColumnToNumber hatte ich bisher nicht gekannt und bei der Fülle der Infos im Intenet nicht entdeckt. Damit werde ich wohl meine Probleme lösen. Schon mal einen speziellen Dank an Musashi. Ich habe den Eindruck, daß ich mit den beiden Funktionen meine Range-Probleme gelöst bekomme. Das geht nur mit der R1C1-Notation. Die VBA-nahen Notationen werde ich mir später vornehmen.

    Jetzt habe ich noch das Probelm mit der Aktivierung von Sheets. Ich habe eine Tabelle mit einem Arbeitsblatt (Sheet), deren Inhalt in das zweiteTabellenbuch, daß mehrere Sheets enthält, übertragen wird. Dabei werden Daten gelöscht und die übrigen Daten abhängig von Datum und Verrechnungen angepasst. Mein Problem: Es sollen die Tabellenbereiche dann, wenn sie bearbeitet werden, angezeigt werden. Mir ist unklar, wie Excel einzugestellen ist, um die Seiten entsprechend sichtbar oder unsichtbar zu machen.

    Jetzt habe ich viel zu verarbeiten.

    Emsige Grüße

    Friedhelm39

  • Lass das $RC= weg und schreiben nur $oExcelB.Sheets(1).Activate

    Weil??? ...das nämlich sowas von egal ist!

    Wenn alles so ist, wie es sein sollte, dann liefert $oExcelB.Sheets(1).Activate im Erfolgsfall True und andernfalls False zurück.

    Damit alles so ist, wie es sein sollte, muss bei der Arbeit mit COM-Objekten ein COM-ERROR-HANDLER installiert sein, der auftretende COM-Fehler abfängt, da AutoIt andernfalls abstürzt.

    Die Seite Obj/COM Reference in der AutoIt-Hilfe ist Pflichtlektüre, wenn man mit COM-Objekten arbeiten will!!!

    Im Anhang noch mal das (erweiterte) Beispiel-Script test2.au3 im Archiv, diesmal aber mit COM-ERROR-HANDLER!

  • Hi, Bitnugger.

    Dein Script ist Spitze - wenn ich auch einige Wissenslücken habe. Zum Ablauf fehlt mir die _Print.au3. Wo finde ich die?

    Wenn Du den Script (oder heißt das das Script?) mal noch mit _Excel_RangeRead erweitern solltest, ich wäre daran interessiert.

    Grüße

    Friedhelm39

  • Zum Ablauf fehlt mir die _Print.au3. Wo finde ich die?

    Einfach auskommentieren ! Das Skript läuft auch ohne.


    EDIT :

    Wenn Du den Script (oder heißt das das Script ?) ...

    Auszug aus : https://www.korrekturen.de/der-die-das.shtml

    Bekanntlich unterscheidet man im Deutschen drei grammatische Geschlechter, auch Genera genannt: Maskulinum, Femininum und Neutrum – also die männliche, die weibliche und die neutrale Form. Angezeigt wird das Genus durch das bestimmte oder unbestimmte Artikelwort: der, die, das; ein, eine. Jedoch gibt es viele Zweifelsfälle, bei denen ein Wort – bei gleicher oder auch anderer Bedeutung – mehrere Genera haben kann, insbesondere im Bereich der Fremdwörter.

    Lt. Duden : das Skript; Genitiv: des Skript[e]s, Plural: die Skripte[n] und Skripts :P

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (19. November 2018 um 21:57) aus folgendem Grund: Antwort erweitert

  • Zum Ablauf fehlt mir die _Print.au3. Wo finde ich die?

    Das ist eines von meinen eigenen Includes... brauchst du nicht... diese Zeile (4) kannst du einfach löschen... ich habe es vergessen.

    Wenn Du den Script (oder heißt es das Script?) mal noch mit _Excel_RangeRead erweitern solltest, ich wäre daran interessiert.

    Ja, das Script.

    Schau dir doch einfach mal die Beispiele zu _Excel_RangeRead in der AutoIt-Hilfe (F1) an...

    _Excel_RangeRead.png

  • So. Die Umstellung auf die neue Excel-UDF ist geschafft dank der Superhilfe aus dem Forum. Zwar ging einiges knapp am Thema vorbei, aber ohne Eure Hilfe hätte ich das wahrscheinlich nicht hinbekommen. Einige Jahre, in denen ich nicht programmiert habe, lassen in meinem Alter doch vieles vergessen. Da hatte ich vielles aufzuarbeiten.

    Ganz herzlichen Dank.

    Einmal editiert, zuletzt von Grufti39 (30. November 2018 um 18:14)