Zielwertsuche automatisieren [Gelöst!]

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Benutzeravatar
daswaldhorn
****
Beiträge: 196
Registriert: Mo, 17.05.2004 22:29
Wohnort: Voerde
Kontaktdaten:

Zielwertsuche automatisieren [Gelöst!]

Beitrag von daswaldhorn »

Hallo alle zusammen,

ich hab in OOo Calc ne tolle Tabelle angelegt und muss nun da in jeder Zeile eine Zielwertsuche machen. Das is ja ziemlich aufwendig, kann man das irgendwie automatisieren mit nem Makro? Ich hab mal einen Durchgang als Makro aufgezeichnet, aber da schau ich nich so recht durch, ich kenn mich mit der Makroprogrammierung halt noch nich aus.

Danke, Carsten

P.S. Hab schon das Forum hier durchsucht, aber nichts passendes gefunden, wenn das Thema schon mal da war, dann bitte einfach den Link posten.
Zuletzt geändert von daswaldhorn am Mi, 25.05.2005 19:31, insgesamt 1-mal geändert.
Benutzeravatar
daswaldhorn
****
Beiträge: 196
Registriert: Mo, 17.05.2004 22:29
Wohnort: Voerde
Kontaktdaten:

Beitrag von daswaldhorn »

Hi,

also das Thema ist wieder aktuell geworden, mittlerweile hab ich die Beta, aber auch da hab ich noch nix neues in diese Richtung entdeckt.

Bin für jeden Tip dankbar.

====EDIT====

Mir ist heute eingefallen, das ein Komilitone von mir das bei Excel mit einem Makro gelöst hatte: Makroaufzeichnung starten - eine Zielwertsuche durchführen - Makroaufzeichnung beenden und speichern. Dann hat er das Makro bearbeitet und eine FOR-Schleife eingebaut und bei den entsprechenden Zellennamen die Laufvariable der Schleife reingeschrieben. Mein Problem ist nun, das in dem aufgezeichneten Makro die Zellen nicht auftauchen, die ich bei dem einen Durchlauf angegeben hatte. Somit hab ich auch nix da, wo ich eine Schleife drum bauen könnte.
Hier mein Makro:

Code: Alles auswählen

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

Sub Main

End Sub


sub zielwert
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", "", , Array())


end sub
Also die Zielwertsuche hat das Makro wohl registriert, jedenfalls steht da ein GoalSeek. Da ich aber die Syntax dieses Befehls nicht kenne, weiß ich nicht, wo ich jetzt die drei Parameter hinschreiben soll, die ich ja im Dialogfenster der Zielwertsuche angeben muss.

Vielen Dank für eure Hilfe,

Carsten
Benutzeravatar
daswaldhorn
****
Beiträge: 196
Registriert: Mo, 17.05.2004 22:29
Wohnort: Voerde
Kontaktdaten:

Neue Erkenntnisse

Beitrag von daswaldhorn »

Hallo zusammen,

also ich hab mir das jetzt nochmal in Excel angesehen und mir ein Makro gebastelt, was so aussieht:

Code: Alles auswählen

Sub Zielwert()

Dim zeile As Integer

For zeile = 1 To 10
    Cells(zeile, 3).GoalSeek Goal:=Cells(zeile, 1), ChangingCell:=Cells(zeile, 2)
Next zeile

End Sub
Das Problem ist jetzt, dieses Makro in OOo zu bringen. Wer hat da eine Idee?

Grüße, Carsten
Benutzeravatar
daswaldhorn
****
Beiträge: 196
Registriert: Mo, 17.05.2004 22:29
Wohnort: Voerde
Kontaktdaten:

Geschafft!!

Beitrag von daswaldhorn »

So, nach einer laaangen Suche, bei der ich auf das OOoForum.org gestoßen bin, hab ich es endlich geschafft! *freu* :D
Hier ist nun mein Ergebnis:

Code: Alles auswählen

sub Zielwertsuche
dim Ergebnis as new  com.sun.star.sheet.GoalResult
dim FormelAdresse as new  com.sun.star.table.CellAddress
dim VariablenAdresse as new  com.sun.star.table.CellAddress
dim Zielwert as integer
dim zeile as integer
   
oDoc = ThisComponent
oSheet = ThisComponent.Sheets(0)
FormelAdresse.Column = 1    'Spalte B
VariablenAdresse.Column = 0 'Spalte A
Zielwert = 5

for zeile = 0 to 9          'Zeile 1...10
VariablenAdresse.Row = zeile
FormelAdresse.Row = zeile
Ergebnis = oDoc.seekgoal(FormelAdresse,VariablenAdresse,Zielwert)

'msgbox Ergebnis.result      'Ausgabe als Messagebox
oSheet.getCellByPosition(VariablenAdresse.Column,zeile).value = Ergebnis.result
next
end sub
Die Frage ist nun, warum ist der Code soviel länger als das Excel-Teil? Das muss doch kürzer gehn :)

Grüße, Carsten

P.S: Vielen Dank an allen, die mir so hilfreich zur Seite standen 8)
Antworten