Makro zum Kopieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

alter
Beiträge: 8
Registriert: Di, 06.12.2005 19:05

Makro zum Kopieren

Beitrag von alter »

Hallo,
ich brüte gerade an meiner Technikerarbeit mit OOO 2.0 Calc. Hierbei erstelle ich Kalkulationslisten, Adresslisten usw.. Soweit klappt auch alles ganz primajavascript:emoticon(':D')
Very Happy, aber ich benötige noch ein paar einfache (?) Makros. Da ich aber unter großem Zeitdruck stehe kann ich mich nicht auch noch in die Makroprogrammierung einarbeiten und unsere Lehrer sind auch keine Hilfe.
Das Makro soll so funktionieren:
Es soll in der Adressenliste in der Zeile, in welcher sich der Cursor befindet, die Zellen von A bis Q ausgewählt und kopiert werden, um sie in einer anderen Datei einzufügen.
Wenn ich nun ein Makro aufzeichne wird immer dasselbe (was ich beim Aufzeichnen des Makros ausgewählt habe - Stichwort: absoluter Bezug) ausgewählt und das mit dem Kopieren funktioniert auch nicht.
Meine anderen Makros funktionieren einwandfrei, nur hier bin ich hoffnungslos überfordert. Könnte bitte jemand so nett sein und mir einen Tip geben?

Gruß Alex :D :D
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
Es soll in der Adressenliste in der Zeile, in welcher sich der Cursor befindet, die Zellen von A bis Q ausgewählt und kopiert werden, um sie in einer anderen Datei einzufügen.
In die Zwischenablage? Ist es da icht schneller, die Zellen per Maus zu markieren, "Strg" + "C" zu drücken und fertig - als erst umständlich ein Makro zu starten?

Im Übrigen ist es nicht so schwierig: der Makrorekorder hat dir doch den Code aufgezeichnet. Jetzt musst du nur noch die fixe Adresse durch eine selbst erstellte ersetzen - die sich aus der aktuellen Position des Cursors ergibt:

Code: Alles auswählen

sub Main
dim sBereich as string
oDoc = thisComponent
oSel = thiscomponent.getCurrentSelection()
if not oSel.supportsService("com.sun.star.sheet.SheetCell") then
  msgbox "bitte nur eine Zelle markieren!"
  exit sub
end if
oZellAdr = oSel.CellAddress
sBereich = "$A$" & oZellAdr.row +1 & ":$Q$" & oZellAdr.row +1          
rem  --- ab hier Dispatcher Code aus dem Makrorekorder
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = sBereich

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
end sub
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alter
Beiträge: 8
Registriert: Di, 06.12.2005 19:05

Beitrag von alter »

Hallo Toxitom,

Erstmal vielen Dank für Deine prompte Hilfe. Mir war zwar klar, daß ich nur die fixe Adresse ersetzen muß, wußte aber nicht wie. Dieses Problem ist Dank Deiner freundlichen Hilfe nun gemeistert.


Ein Problem besteht aber weiterhin:

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

Beim kopieren wird offensichtlich nicht in die Zwischenablage kopiert. D. h. wenn ich in eine andere Tabelle gehe und einfüge, wird das davor kopierte eingefügt. Der o. g. Befehl überschreibt die Zwischenablage also nicht!

Hat mir dazu noch jemand einen Tip?

Gruß alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
Beim kopieren wird offensichtlich nicht in die Zwischenablage kopiert.
Hmm, kann ich nicht bestätigen. Bei mir (Win XP, OOo 2.0.1) wird in die Zwischenablage kopiert - und ich kann auch in andere Dokumente einfügen.

Welches BS verwendest du?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alter
Beiträge: 8
Registriert: Di, 06.12.2005 19:05

Beitrag von alter »

Hallo Thomas,

Ich verwende WinXP (SP 2) und OOO 2.0.

Nach dem Ausführen des Makros sind auch die Icons fürs kopieren, ausschneiden und einfügen nicht mehr aktivierbar (grau). Das funktioniert dann nur noch übers Komtextmenü.
Ich hab auch schon in den Optionen von OOO nachgesehen, ob was verstellt ist, aber nichts gefunden. Wenn es aber bei Dir funktioniert, muß hier wohl ein Fehler auf meinem Rechner vorliegen.
Vielleicht sollte ich OOO einfach mal neu installieren, oder fällt Dir oder jemand anderes noch was dazu ein?

Bin für jeden Tip dankbar!

Gruß alex
alter
Beiträge: 8
Registriert: Di, 06.12.2005 19:05

Beitrag von alter »

Noch ein Nachtrag zu meiner letzten Nachricht:

Wenn ich das Makro direkt aus dem Basic-Programm heraus ausführe funktioniert es mit dem Kopieren.
Aber so bald ich das Makro per Klick auf eine Schaltfläche (Ereignisse / Beim Auslösen) ausführe, funktioniert das mit dem Kopieren nicht! Dies ist sowohl auf meinem PC als auch auf meinem Laptop der Fall.

Gruß alex
Antworten