LibreOffice Calc Makros

  • Ich wollte ein Makro aufzeichnen was folgendes ausführen soll:

    A1 | B1 | C1

    5 | 5 | 12

    Nun soll im Feld C1 folgende Formel gesetzt werden:

    =(A1+B1)

    Anschließend soll das auf jede Zeile ausgeführt werden bis eine Zeile leer ist.

    Erweitere ich die Aufzeichnung selbst weiter, dann wird nur der aufgezeichnete Teil abgespielt, nicht meine Ergänzungen. Mit dem Dispatcher komme ich nicht weiter.

    Mit VBA kenne ich mich so gar nicht aus.

    Hilfe!

    #ichmussmalmächtigkacken

    Einmal editiert, zuletzt von nicoletta (5. Mai 2023 um 18:53)

  • Ich hatte einen Fehler und habe den gerade korrigiert. Es soll heißen =(A1+B1)

    #ichmussmalmächtigkacken

  • In C1 steht ein Wert der mit der Formel überschrieben werden soll und am liebsten dann in einen Text gewandelt werden um die Spalten A1 und B1 löschen zu können

    #ichmussmalmächtigkacken

  • Scheint wohl doch komplexer zu sein. Ich wäre ja schon zufrieden wenn die Bezugsspalten nicht gelöscht werden.

    Mir fehlt einfasch der Ansatz mit VBA das umzusetzen.

    #ichmussmalmächtigkacken

  • Ich habe einen kleinen Test durchgeführt. Du kannst die folgenden Befehle im LibreOffice Calc unter Makros bearbeiten einfügen:

    SUB aetti

    dim iLetzte as integer

    oBlatt= ThisComponent.CurrentController.getActiveSheet()

    With oBlatt ' Letzte Zeile der Spalte B ermitteln

    x = .Columns(1).queryEmptyCells()

    iLetzte = x(x.Count-1).RangeAddress.StartRow - 1

    End With

    Print "iLetzte:",iLetzte

    dim i as integer

    i = 0

    Do

    print "a:",oBlatt.getCellByPosition(0, i).value

    print "b:",oBlatt.getCellByPosition(1, i).value

    print "c:",oBlatt.getCellByPosition(2, i).value

    oBlatt.getCellByPosition(2, i).value = oBlatt.getCellByPosition(0, i).value + oBlatt.getCellByPosition(1, i).value

    print "c-geändert:",oBlatt.getCellByPosition(2, i).value

    i = i + 1

    Loop While i <= iLetzte

    end sub

    Hinweise:

    Die "print" Befehle habe ich nur zum Testen benutzt.

    Unter Sub kannst Du natürlich aetti ändern :)

  • Hui, das probiere ich morgen gleich mal aus.

    Lieben Dank.

    Ich würde das auch gerne verstehen was was ist und was macht. Wenn ich dir dazu Fragen stellen darf. Evt. per PM?!?

    #ichmussmalmächtigkacken

  • Natürlich kannst Du Fragen stellen (PM habe ich leider nicht verstanden).

    Hier noch einige Ergänzungen:

    Zuerst versuchte ich zu verstehen was die Herausforderung ist.

    -> Es gibt eine Datei mit Daten die ergänzt (weitere Zeilen) werden kann und neu berechnet werden soll.

    Im Internet habe ich ein wenig gesucht und dann einige Funktionen zusammengelegt und natürlich getestet!

    Ich habe festgestellt, dass es viele Wege gibt. Vermutlich ist mein Makro nicht immer auf der Autobahn.

    Im "Makro" wird im ersten Teil die letzte leere Zeile des aktuellen Dokuments ermittelt. Dies passiert hier mit der Spalte "B".

    Im zweiten Teil werden dann alle Zeilen bis zur letzten Zeile mit Inhalt in einer Schleife bearbeitet ("Do....").

    Heimtücksich an der Geschichte ist, dass alles mit "0" beginnt.

    Beispiel: oBlatt.getCellByPosition(0, 0) wäre die Zelle A1.

    Zum Testen habe ich ein neues Dokument mit 3 Zeilen und 3 Spalten inklusive Zahleninhalt erstellt.

    Im Dokument unter Extras - Makros - Makros bearbeiten die erwähnten Zeilen eingefügt und das Makro ausgeführt.

    Das Makro "aetti" ist unter "Meine Makros" abgelegt.

    Das wärs im Moment.

  • Hallo grüss euch

    Das wird so meines Erachtens nicht funktionieren da musst du mit array arbeiten.

    Ich muss erst mal ausschlafen bis morgen Nachnmittag dann hoffe ich mich da eindenken zu können.

    Sorry ich komme kaum noch dazu an irgendwas anders zu denken als den Job.

    Ich hoffe morgen bin ich wieder klarer..

    Machs gut

    fubba

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!