BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zellinhalt in ein Argument im Makro verwenden

Alles zur Programmierung im LibreOffice.
Antworten
ChrWelsch
Beiträge: 6
Registriert: Di 8. Feb 2022, 11:11

Zellinhalt in ein Argument im Makro verwenden

Beitrag von ChrWelsch » Mi 1. Mär 2023, 12:16

Hallo zusammen,
leider verfüge ich nicht (mehr) über (aktuelle) Programmierkenntnisse und hoffe, ich bin hier im Bereich richtig.
Nach langer Zeit mit Calc will ich nun wieder etwas einsteigen und mit ein paar grundlegenden Dingen beginnen.
In der Vergangenheit hatte ich mir das Gerüst mit der Makroaufzeichnung in Calc gestellt - in der Tabelle gespeichert und dann meine veränderlichen Bereiche aus den Zellen mit den vorhanden Funktionen geholt. Klappt bei den alten Versionen von Calc bis heute alles prima.
Nun muss ich (leider) modifizieren.
Ich habe z.B. meinen Kopierbereich definiert in Zelle $D$80 (z.B. $A$26:$H$28) und mein Ziel in Zelle $D$81 (z.B. $A$100). Da sollen die Inhalte hin - nicht mit Formeln.
Wie bekomme ich meinen Zellinhalt zwischen die Hochkommatas als Value für z.B. args1?
Oder in "quick and dirty" mal einen lauffähige sub ...
Danach sollte ich weiterkommen und wieder rein kommen ... hoffe ich ....
Danke vorab

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Zellinhalt in ein Argument im Makro verwenden

Beitrag von mikele » Mi 1. Mär 2023, 21:31

Hallo,
na denn mal so quick'n'dirty per Dispatcher:

Code: Alles auswählen

sub Main

rem define variables
dim document   as object
dim dispatcher as object

rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "D80"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

oZelle=ThisComponent.Currentselection
sQuelle=oZelle.String

args1(0).Name = "ToPoint"
args1(0).Value = sQuelle
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

args1(0).Name = "ToPoint"
args1(0).Value = "D81"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

oZelle=ThisComponent.Currentselection
sZiel=oZelle.String


dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = sZiel
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVD"
dispatcher.executeDispatch(document, ".uno:.uno:InsertContents", "", 0, args4)

end sub

oder etwas hübscher

Code: Alles auswählen

Sub Main2
	'Zugriff auf das Dokument
	oDoc=ThisComponent
	'Zugriff auf die Tabelle
	oTab=oDoc.Sheets.getByName("Tabelle1")
	'Auslesen der Bereichsadressen aus den Zellen
	sQuelle=oTab.getCellRangeByName("D80").String 'enthält z. B. $A$26:$H$28
	sZiel=oTab.getCellRangeByName("D81").String	'enthält z. B. $A$100, also nur die linke obere Ecke
	'Auslesen der Daten aus dem Quellbereich
	aDaten=oTab.getCellRangeByName(sQuelle).getDataArray
	'Zielbereich auf gleiche Größe wie Quellbereich ausdehnen
	oZiel=oTab.getCellRangeByName(sZiel).RangeAddress
	oZielBereich=oTab.getCellRangeByPosition(oZiel.StartColumn, oZiel.StartRow, oZiel.StartColumn+ubound(aDaten(0)), oZiel.StartRow+ubound(aDaten))
	'Schreiben der Daten in den Zielbereich
	oZielBereich.setDataArray(aDaten)
	
End  Sub
Gruß,
mikele

ChrWelsch
Beiträge: 6
Registriert: Di 8. Feb 2022, 11:11

Re: Zellinhalt in ein Argument im Makro verwenden

Beitrag von ChrWelsch » Mi 1. Mär 2023, 23:55

@ mikele --> Vielen dank - werde mich dann mal ins stille Kämmerlein zurückziehen ... schon erschreckend, was man so vergisst, wenn man es länger nicht benutzt. Ich habe selber zuletzt vor ca. 6 Jahren darin gebastelt ... da fühlt man sich jetzt sofort wieder als Anfänger

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten