Zielwertsuche

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

Moderator: Moderatoren

TowerDefender
Beiträge: 6
Registriert: Mi, 12.04.2023 13:33

Zielwertsuche

Beitrag von TowerDefender »

Moin, ich versuche gerade eine Zielwertsuche zu automatisieren. Denn ich möchte einen Button welchen ich drücken kann nach dem ich alle Werte in meine Tabelle eingetragen habe und ich damit dann die Zielwertsuche starten kann. Das Problem ist nur ich weiß nicht was ich in das Makro eintragen muss das es die richtigen Zellen verwendet auf die es schauen muss um die Werte aus den Zellen auslesen zu können und dann verwenden kann um eine Zielwertsuche machen zu können.

Folgendes habe ich bereits in einem Makro hinterlegt:

Code: Alles auswählen

REM  *****  BASIC  *****





sub Main
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 ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:GoalSeekDialog", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoalSeek", "", 0, Array())


end sub
Ich hoffe irgendwer kann mir dabei weiterhelfen denn im programmieren bin ich generell schlecht.

Moderationshinweis: Thema in den Bereich Makros und allgemeine Programmierung verschoben
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Zielwertsuche

Beitrag von mikeleb »

Hallo,
ich bin mir nicht sicher, ob ein Makro nötig ist. Falls die Zielwertsuche in ein größeres Projekt eingebunden ist, würde ich es damit probieren:

Code: Alles auswählen

sub Main
	'Zugriff auf Dokument
	oDoc=ThisComponent
	'Zugriff auf die 1. Tabelle
	oTab=oDoc.Sheets(0)
	'Formelzelle
	oFZ=oTab.getcellrangebyname("C3").celladdress
	'variable Zelle
	oVZ=oTab.getcellrangebyname("B3").celladdress
	'Zielwert als String
	sZiel="-1"
	oresult=oDoc.seekgoal(oFZ, oVZ, sZiel)
	
	msgbox oresult.divergence & chr(10) & oresult.result

end sub
Die Tabelle und die Zellen müssen entsprechend angepasst werden.
Die Methode seekGoal() gibt ein Struct mit zwei Fließkommazahlen vom Typ Double zurück. Die Eigenschaft Result enthält den Lösungsvorschlag. Die Eigenschaft Divergence enthält die Differenz zwischen dem letzten Näherungsschritt und dem ausgewiesenen Ergebnis. Ist die Differenz klein, ist das Ergebnis wahrscheinlich hinreichend korrekt. Ist jedoch die Differenz groß, ist das Ergebnis wahrscheinlich nicht genau genug.
Zitat aus https://www.prooo-box.org/live/dokument ... eutsch.pdf (Kapitel 15.6.6)
Gruß,
mikeleb
TowerDefender
Beiträge: 6
Registriert: Mi, 12.04.2023 13:33

Re: Zielwertsuche

Beitrag von TowerDefender »

Moin, ich kenne mich damit leider nicht wirklich aus was ich wo Einsetzen muss um zu meinem Ziel zu kommen daher anbei meine Datei. Dabei soll durch das Drücken auf den "Zielwertsuche starten" Button die Zielwertsuche gestartet werden. Dabei sollen folgende Zellen verwendet werden:

Formelzelle: C2
Zielwert: C9
Variable Zelle: C4

Dabei soll nach dem man in C9 seinen gewünschten Wert eingetragen hat durch das Drücken des Buttons die Zielwertsuche gestartet werden und dabei soll dann die gewünschte Leiterbahnbreite berechnet werden (für alle Lagen gleiche Breite).

Vielleicht kann einer das Makro bzw. die Datei so abändern von mir das das gewünschte Funktioniert denn ich blicke es nicht wirklich durch.
Dateianhänge
Leiterbahnbreite.ods
(15.46 KiB) 72-mal heruntergeladen
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Zielwertsuche

Beitrag von mikeleb »

Hallo,
also ein paar Anpassungen/Konkretiserungen:

Code: Alles auswählen

sub Main
	'Zugriff auf Dokument
	oDoc=ThisComponent
	'Zugriff auf die 1. Tabelle
	oTab=oDoc.Sheets(0)
	'Formelzelle
	oFZ=oTab.getcellrangebyname("C2").celladdress
	'variable Zelle
	oVZ=oTab.getcellrangebyname("C4").celladdress
	'Zielwert als String
	sZiel=oTab.getcellrangebyname("C9").string
	oresult=oDoc.seekgoal(oFZ, oVZ, sZiel)
	
	if oresult.divergence=0 then
		oTab.getcellrangebyname("C4").value=oresult.result
	else
		oTab.getcellrangebyname("C4").string="Fehler"
	end if


end sub
Gruß,
mikeleb
TowerDefender
Beiträge: 6
Registriert: Mi, 12.04.2023 13:33

Re: Zielwertsuche

Beitrag von TowerDefender »

Moin, vielen Dank für die Antwort und für die Hilfe.
Antworten