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:
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
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:
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.
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.
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