Einfaches "Multiplizieren-Makro" in Calc

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

Hallo Leute,
ich bin Neueinsteiger bei OpenOffice und habe ein kleine Problem bei der Makroerstellung in Calc.
Ich möchte ein Makro erstellen, welches die beiden Zellen links von der aktiven Zelle miteinander multipliziert. Der Makrorekorder hat dazu folgendes aufgezeichnet:
sub Multiplizieren
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 = "StringName"
args1(0).Value = "=C10*D10"

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


end sub

Das Problem ist, dass das Makro immer nur die Zellen C10*D10 multipliziert, nicht aber die Zellen links neben der aktiven Zelle.
Habe leider im Forum keinen passenden Beitrag gefunden. Vilen Dank schon im Voraus.
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von mikeleb »

Hallo,

bevor du zu Makros greifst. Was ist dein Ziel?
Wenn du in die Zelle E1 die Formel

Code: Alles auswählen

=C1*D1
schreibst und diese zelle dann an eine beliebige Stelle kopierst, berechnet sie dir dort das Produkt der beiden Zellen links von ihr (Stichwort: relative Addressierung).
Wozu brauchst du zwingend ein Makros?
Gruß,
mikeleb
plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

ich habe mir in Excel schaltflächen gebaut mit den Verschiedensten Operationen, z.B. +,-,*,/,+%,-% , um beim rechnen schneller darauf zugreifen zu können.
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von mikeleb »

Hallo,

so sollte es funktionieren:

Code: Alles auswählen

Sub mutliplikation
	odoc=thiscomponent
	oblatt=odoc.sheets(0)
	osel=odoc.getcurrentselection()
	checkzelle=HasUnoInterfaces( osel, "com.sun.star.table.XCell" )
	if checkzelle then
		nrow=osel.getrangeaddress().startrow
		ncolumn=osel.getrangeaddress().startcolumn
		if ncolumn>1 then
			op1=oblatt.getcellbyposition(ncolumn-2,nrow).value
			op2=oblatt.getcellbyposition(ncolumn-1,nrow).value
			osel.value=op1*op2
		end if
	end if
End Sub
Die zwei If-Bedingungen fangen ab, dass die Multiplikation nur ausgeführt wird, wenn eine einzelen Zelle markiert ist und diese sich min. in Spalte C befindet.
Gruß,
mikeleb
plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

Vielen Dank für die schnelleHilfe, das Makro funktioniert.
Der einzige Nachteil und Unterschied zu meinen Makros in Excel ist, dass in der Befehlsleiste deines Makros nur das Ergebnis als Zahl steht und nicht als Formel, so dass man damit nicht als Formel weiterarbeiten kann.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von clag »

Hallo plutoluene,

hier eine etwas gepimpte Variante

Code: Alles auswählen

sub CalcTwoCells(event)

	odoc=thisComponent
	oSheet = oDoc.sheets(0)
	oZelle = oDoc.getCurrentSelection()
	iStartCol = oZelle.RangeAddress.StartColumn
	iStartRow = oZelle.RangeAddress.StartRow
	iEndRow = oZelle.RangeAddress.EndRow
	sCalcSign = event.Source.Model.Tag

		if iStartCol < 2 then 
			msgbox "links müssen sich midestens 2 Zellen befinden"
			exit sub
		end if

		for i = iStartRow to iEndRow
			aCellNameA = split(oSheet.getCellByPosition(iStartCol-2,i).absoluteName,".")
			aCellNameB = split(oSheet.getCellByPosition(iStartCol-1,i).absoluteName,".")
'für absolute Adressen
'			oSheet.getCellByPosition(iStartCol,i).formula = _
'			"=" & aCellNameA(1) & sCalcSign & aCellNameB(1)
'für einfache Adressen
			oSheet.getCellByPosition(iStartCol,i).formula = _
			"=" & Join(split(aCellNameA(1),"$"),"") & sCalcSign & Join(split(aCellNameB(1),"$"),"")
		next

end sub
zweiZellenButtonRechnen.ods
(11.7 KiB) 98-mal heruntergeladen
kannst auch mehrere Zellen untereinander markieren, dann werden auch mehrere Formeln generiert

viel Spaß
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

Hallo clag,
vielen Dank für Deine Mühe.
Makro funftioniert leider nicht - Fehlermeldung: Ein Scripting Framework Fehler trat während der Ausführung vom Basic-Skript Standard.Module1.CalcTwoCells auf.

Meldung: wrong number of parameters!
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von clag »

Hallo plutoluene22,

was funktioniert nicht, wenn du was wo tust?

Bei welcher Aktion kommt die Fehlermeldung?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von Karolus »

clag hat geschrieben:Hallo plutoluene22,

was funktioniert nicht, wenn du was wo tust?

Bei welcher Aktion kommt die Fehlermeldung?
Vmtl. versucht pluto das Ding aus der IDE zu starten, und nicht wie vorgesehen über die Schaltfläche
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von clag »

Hallo Karolus,

jetzt wo du es so schreibst, ist das wohl die naheliegendste Erklärung.

Hatte darum die Beispieldatei dazu gepackt, damit man das Makro erst einmal ausprobieren kann.
Naja vieleicht meldet plutoluene22 ja noch und klärt auf wie wo was warum....
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

Hallo, bin erst jetzt wieder online.
Also, ich habe das Makro in die OpenOffice Basic geschrieben und dann über Extras-Makros-Makros ausführen aktiviert.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von clag »

Hallo plutoluenne22,

hast du dir die Beispieldatei einmal angeschaut?

du hattest von Schaltflächen geschrieben die das Einfügen der Formeln auslösen !?
wie kommst du nun darauf da mein Makro ohne Schaltfläche auskommt (was natürlich auch funktioniert)
aber dieses Makro fragt den Rechenoperator von der Schaltfläche ab, (Zusatzinformation der Schaltfläche)

Code: Alles auswählen

sCalcSign = event.Source.Model.Tag
damit mit diesem einen Makro alle Formelvarianten * / + - erzeugt werden können

Du kannst natürlich auch den Rechenoperator fest vergeben z.B. so

Code: Alles auswählen

sCalcSign = "*"
dann sollte es auch ohne Button funktionieren so wie du es probiert hast
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
plutoluene22
*
Beiträge: 13
Registriert: Mi, 04.03.2015 15:42

Re: Einfaches "Multiplizieren-Makro" in Calc

Beitrag von plutoluene22 »

Sorry, mit Schalflächen meinte ich, dass ich mit diese in der Symbolleiste baue.
Antworten