Excel, Zeile löschen wenn (Summe = $rechnung) ist geht nicht

  • Moin moin,

    Versuche aus einer Tabelle Zeilen zu löschen die eine bestimmte Summe haben.

    Spoiler anzeigen
    [autoit]

    $Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row ; -4162 = xlUp
    $Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
    $Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column

    [/autoit] [autoit][/autoit] [autoit]

    Func nullzeilenloeschen()
    For $Zeilen = $Zeilenanzahl To 8 Step -1
    While 1
    $wandeln2 = _ColNrToLetter($Spaltenanzahl)
    If $Spaltenanzahl = 4 Then ExitLoop
    $Spaltenanzahl = $Spaltenanzahl-1
    If $oExcel.Application.Sum($oExcel.Cells($Zeilen, $wandeln2).Resize($Zeilenanzahl,1)) = 0 Then
    $oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
    $oExcel.Selection.Delete.Shift = -4161
    EndIf
    WEnd
    Next
    EndFunc;==>nullzeilenloeschen

    [/autoit] [autoit][/autoit] [autoit]

    Func _ColNrToLetter($iColNr)
    If $iColNr <= 26 Then Return Chr($iColNr+64)
    $iColNr -= 26
    Local $1 = 65, $2 = 90, $tmp, $diff = 1
    $tmp = Mod($iColNr,26)
    If $tmp Then
    $2 = 64 +$tmp
    $diff = 0
    EndIf
    $1 += Int($iColNr/26) - $diff
    Return Chr($1) & Chr($2)
    EndFunc

    [/autoit]

    Das geht auch so weit.

    Nur wenn ich das selbe Variabel gestalte also anstatt der festen 0 eine Variable benutze geht es nicht.

    Spoiler anzeigen
    [autoit]

    $Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row
    $Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
    $Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column
    $rech = $Zeilenanzahl -7
    $rechnung = -99 * $rech
    Func neunundneun()
    For $Zeilen = $Zeilenanzahl To 7 Step -1
    While 1
    $wandeln2 = _ColNrToLetter($Spaltenanzahl)
    If $Spaltenanzahl = 4 Then ExitLoop
    $Spaltenanzahl = $Spaltenanzahl-1
    If $oExcel.Application.Sum($oExcel.Cells($Zeilen, $wandeln2).Resize($Zeilenanzahl,1)) = $rechnung Then
    $oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
    $oExcel.Selection.Delete.Shift = -4161
    EndIf
    WEnd
    Next
    EndFunc;==>neunundneun

    [/autoit] [autoit][/autoit] [autoit]

    Func _ColNrToLetter($iColNr)
    If $iColNr <= 26 Then Return Chr($iColNr+64)
    $iColNr -= 26
    Local $1 = 65, $2 = 90, $tmp, $diff = 1
    $tmp = Mod($iColNr,26)
    If $tmp Then
    $2 = 64 +$tmp
    $diff = 0
    EndIf
    $1 += Int($iColNr/26) - $diff
    Return Chr($1) & Chr($2)
    MsgBox(0,"$iColNr",$iColNr)
    EndFunc

    [/autoit]


    Das Ergebnis von $rechnung ist so weit richtig in diesem Fall -11781 nur löscht er mir die zeilen halt nicht.
    Kann es sein das autoit mit dem (-) Zeichen nicht klar kommt ?
    Hatte es auch schon in klammern ( $rechnung ) versucht mit dem selbigen ergebnis.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    2 Mal editiert, zuletzt von oh-ha (1. August 2010 um 10:25)

  • Wenn Du Zeilen in Excel löschen möchtest, dann mußte Du auch Excel mitteilen, wie er die anderen Zeilen Verschieben soll. Er fragt doch ab, wenn man direkt im Excel ist, ob er die Zeilen nach oben verschieben soll oder nicht? Da meine ich ist das Problem zu suchen.
    Kann aber auch sein, das ich mich an dieser Stelle vertan habe. Aber das wäre eine Sache, die man in einem guten Office-Forum sicherlich schnell in Erfahrung bringen kann. Man müßte die Tabelle, ohne wertvolle Werte versteht sich einsehen. Evtl. kann man da sowieso eher was direkt in Excel machen bzw. muss es evtl. auch, wenn es danach zu einer Anpassung kommen muß durch evtl. Formeln.

    In der Anlage mal eine Exceldirekt Lösung. Wenn Du in Spalte C das Wort autoit schreibst, dann wird die Zeile gelöscht und die anderen Zeilen rücken von unten nach oben auf.
    Frage mich jetzt aber nicht, wie man das in AutoIt umsetzt. ;)

    Muster: autoit.de/wcf/attachment/10857/

    Dateien

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (31. Juli 2010 um 12:50) aus folgendem Grund: Anlage nach Anpassung beigefügt.

  • Hallo Alina,

    Erst einmal Danke für die Antwort.
    Excel wird mitgeteilt wohin es verschieben musss. Ist diese Zeile im Code

    [autoit]

    $oExcel.Selection.Delete.Shift = -4161

    [/autoit]


    xlup = -4161

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Ja, Du sagst ihn die zu löschende Zeile, aber ich meine das man Excel noch irgendwie mitteilen muß, was mit den Zeilen -4162 bis XXXX passieren soll. Sollen sie bleiben wo sie sind oder sollen sie nach oben anschließen. Ich meine das dort noch was an Excel übergeben werden muss. Habe gerade mein dickes Excel-Buch nicht hier. da finde ich meistens eine Lsg. für soclhe Probleme. Nicht umsonst sind es mehr als 1.000 Seiten. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • ups,

    nü haben wir uns missverstanden.

    Die -4161 = xlup bei Excel
    Der Tabelle wird damit mitgeteilt das sie nach oben verschieben soll.
    Kannst du im Visual-Basic-Editor in Excel nachschauen wenn du die F2 klickst und da, im Objektkatalog, mal xlup eingibst in der Suche.
    Dann sollte da unten stehen
    Const xlUp = -4162 (&HFFFFEFBE)
    So hole ich mir alle Const. in Excel um sie mit Autoit direkt anzusprechen.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Ja, da steht: [Const xlUp = -4162 (&HFFFFEFBE)]

    Okay, dann weiß ich leider nicht weiter. :(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Aber die Lsg. die ich Dir in der Datei zur Verfügung gestellt habe finde ich auch ganz gut.

    Nutze ich wenn ich Sachen "erst einmal" zur Seite schiebe. Schnell mal Datei abspeichern. Pfad eintragen in die Excelliste(A), Datum(B) dazu, Sachverhalt(D) in Kurzform und speichern. So vergißt man nicht die Dateien, die man noch dringend bearbeiten muss. Oder man schieb die Datei (oder ausschnitte) an andere weiter. Arbeit ist zum delegieren da, wenn man die richtige Position hat. ;)
    Und fein ist es, wenn man jedes man, wenn eine Sache die man delegieren hat auf "fertig" gestellt ist, eine Email bekommt bzw. die Zeile bei sich auf Überprüfen kopiert bekommt. Mit Excel kann man eine Menge machen. Man muß nur wissen wie.

    Leider bin ich aber bei Deinem Problem, der Zusammenarbeit mit AutoIt, an meine Grenzen gestoßen. Sorry, und evtl. findet jemand noch eine Lsg..

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Habe das von dir mal in einen Autoit code gemacht.

    [autoit]

    #include <Excel.au3>
    $sFilePath = @DesktopDir & "\muster.xls"
    $oExcel = _ExcelBookOpen($sFilePath)
    If $oExcel.Target.Column <> 3 Then Exit
    $oExcel.Application.EnableEvents = 0 ;0 = False
    If $oExcel.Target.Value = "autoit" Then $oExcel.Target.EntireRow.Delete
    $oExcel.Application.EnableEvents = 1 ;1 = True

    [/autoit]


    Mein Problem ist einfach das es auf mehreren Rechnern zum einsatz kommt und die da meist sehr eigen sind was Makros angeht.

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Habe es raus bekommen.
    Verstehe zwar noch nicht warum aber zumindest geht es jetzt.
    Hier mal der richtige Code:

    Spoiler anzeigen
    [autoit]

    $Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row
    $Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
    $Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column
    $rech = $Zeilenanzahl -7
    $rechnung = -99 * $rech
    Func neunundneun()
    For $Zeilen = $Zeilenanzahl To 7 Step -1
    While 1
    $wandeln2 = _ColNrToLetter($Spaltenanzahl)
    If $Spaltenanzahl = 4 Then ExitLoop
    $Spaltenanzahl = $Spaltenanzahl-1
    If $oExcel.Application.Sum($oExcel.Cells("7", $wandeln2).Resize($Zeilenanzahl,1)) = $rechnung Then
    $oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
    $oExcel.Selection.Delete.Shift = -4161
    EndIf
    WEnd
    Next
    EndFunc;==>neunundneun

    [/autoit] [autoit][/autoit] [autoit]

    Func _ColNrToLetter($iColNr)
    If $iColNr <= 26 Then Return Chr($iColNr+64)
    $iColNr -= 26
    Local $1 = 65, $2 = 90, $tmp, $diff = 1
    $tmp = Mod($iColNr,26)
    If $tmp Then
    $2 = 64 +$tmp
    $diff = 0
    EndIf
    $1 += Int($iColNr/26) - $diff
    Return Chr($1) & Chr($2)
    MsgBox(0,"$iColNr",$iColNr)
    EndFunc

    [/autoit]


    Haut irgendwie nicht hin wenn ich in Zeile 12 die Zelle Variabel mache.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit