Seite 1 von 1

Makro in Impress: Duplizieren + Inhalte löschen in Objekten

Verfasst: Mo, 16.09.2013 15:54
von apop343
Hallo, bin blutiger Anfänger in der OOo-Makro-Programmierung - aber vielleicht kann mir jemand beistehen?

Ich benutze Impress, um mit Kunden zusammen Ideen zu entwickeln. Dafür benutze ich die rechteckigen Zeichnungsobjekte wie Moderationskarten.
Das heisst: eine Idee mit ein paar Stichworten auf eine Karte schreiben, dann brauche ich eine neue leere Karte darunter.
Und genau für diese Aktion "neue leere Karte darunter" benötige ich ein Makro, damit ich nicht jedesmal duplizieren, fenster bestätigen, bisherigen Inhalt löschen klicken muss. Vermutlich für erfahrene Makro-Programmierer ein Klacks, für mich unlösbar...

Ein bisschen habe ich ja schon:

Code: Alles auswählen

sub KopiereneinfuegenKarte
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
end sub
...damit ist schon mal eine identische Kopie der bisherigen markierten Karte entstanden.
Was muss ich nun programmieren, damit die Kopie zum Beispiel 2,0 cm in der Y-Achse versetzt wird und deren Inhalt gelöscht wird?
Vielen Dank für Eure Hilfe!


Moderation:
[​code]…[​/code] Tags gesetzt
lorbass, Moderator

Re: Makro in Impress: Duplizieren + Inhalte löschen in Objek

Verfasst: Mo, 16.09.2013 19:20
von F3K Total
Hi,
dies funktioniert:

Code: Alles auswählen

sub KopiereneinfuegenKarte
    dim document   as object
    dim dispatcher as object
    oRectangle = thiscomponent.currentselection(0)
    if isnull (oRectangle) then 
        msgbox ("Bitte zu kopierende Karte markieren",16,"Fehler")
        exit sub
    endif
    opos = oRectangle.Position
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
    onewRectangle = thiscomponent.currentselection(0)
    opos.Y = oPos.Y + 2000 '2,000 cm nach unten
    onewRectangle.Position = opos
    onewRectangle.String =""
end sub
Siehe auch Beispieldatei.
EDIT: Habe eine überflüssige Makro Zeile gelöscht. Anhang erneut hochgeladen.
Gruß R

Re: Makro in Impress: Duplizieren + Inhalte löschen in Objek

Verfasst: Mo, 16.09.2013 22:45
von apop343
hallo F3K total,
wow, es klappt, super, vielen dank!
wenn ich mir den code so anschaue, wirkt er zwar hübsch und klar, aber doch so, dass ich selber wohl noch jahre daran gedoktort hätte...
auch danke dem moderator für die überarbeitung meiner frage.
so macht computern und foren-nutzen spaß!