-
Moderator: Moderatoren
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Hallo DPunch,
kurze Verständnisfrage:
Obwohl Counter innerhalb der function dimensioniert wird, kann die static-Variable innerhalb der aufrufenden Sub angesprochen werden?
Gruß Rik
kurze Verständnisfrage:
Obwohl Counter innerhalb der function dimensioniert wird, kann die static-Variable innerhalb der aufrufenden Sub angesprochen werden?
Gruß Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Servus
Nein, die Variable ist lokal und somit nur innerhalb der aufgerufenen Prozedur/Funktion sichtbar.
Aber wie gesagt behält die Variable ihren Wert - mal am vorliegenden Fall erklärt:
Counter wird beim ersten Aufruf der Funktion als Integer mit Wert 0 initialisiert. Wird der Wert dann innerhalb der Funktion verändert, wird dieser Wert beibehalten, bis die Makros komplett durchgelaufen sind. Dadurch folgt dann:
Es spricht prinzipiell zwar nichts gegen die Verwendung einer modulweit sichtbaren Variable (also Deinen Vorschlag), allerdings müsstest Du dann z.B. beim Kopieren des Makros immer daran denken, die Variable mitzunehmen und hättest einen "verschmutzten" Namensraum innerhalb des Moduls.
Nein, die Variable ist lokal und somit nur innerhalb der aufgerufenen Prozedur/Funktion sichtbar.
Aber wie gesagt behält die Variable ihren Wert - mal am vorliegenden Fall erklärt:
Code: Alles auswählen
Function F_get_solver_variables_from_named_Range(S_named_Range)as Object
Static Counter as Integer
dim Variables(0) as new com.sun.star.table.CellAddress
(...)Code: Alles auswählen
(...)
'Erster Aufruf: Counter wird mit Wert 0 initialisiert - innerhalb der Funktion wird z.B. bis auf 10 hochgezählt
Variables() = F_get_solver_variables_from_named_Range("Mengen")
'Zweiter Aufruf: Counter hat seinen Wert behalten und steht am Anfang auf 10
Variables() = F_get_solver_variables_from_named_Range("Mengen2")
(...)Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Hallo DPunch,
Klasse, und Danke für die Erklärung!
Wieder eine Feinheit, die, richtig eingesetzt, hilft, besseren Code zu schreiben.
Habe es ausprobiert:
--> Eine "normal" per DIM dimensionierte Integer Variable wird bei jedem Start der function/sub neu initialisiert und startet dann bei 0.
beste Grüße von Rik
Klasse, und Danke für die Erklärung!
Wieder eine Feinheit, die, richtig eingesetzt, hilft, besseren Code zu schreiben.
Habe es ausprobiert:
Code: Alles auswählen
Sub S_Test_Static_Variable
msgbox "Nonstatic: "+F_count_plus_three
msgbox "Static: "+F_count_plus_four
msgbox "Nonstatic: "+F_count_plus_three
msgbox "Static: "+F_count_plus_four
msgbox "Nonstatic: "+F_count_plus_three
msgbox "Static: "+F_count_plus_four
msgbox "Nonstatic: "+F_count_plus_three
msgbox "Static: "+F_count_plus_four
End Sub
function F_count_plus_three
dim counter as integer
for i = 0 to 2
counter = counter + 1
next i
F_count_plus_three = counter
end function
function F_count_plus_four
static counter as integer
for i = 0 to 3
counter = counter + 1
next i
F_count_plus_four = counter
end functionbeste Grüße von Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Moin,
um z.B die Variables in einer msgbox auszugeben, geht dies:
Bei den Constraints wirds schwieriger, da hast Du noch eine Ebene mehr.
1.) Constraints() ->
Gruß R
um z.B die Variables in einer msgbox auszugeben, geht dies:
Code: Alles auswählen
dim asV(ubound(Variables)) as string
for l = 0 to ubound(Variables)
cVariable = Variables(l)
asV(l) = "V" & l & " Spalte: " & cVariable.Column & " Zeile: " & cVariable.Row & " Blattindex: " & cVariable.Sheet
next l
msgbox join(asV, chr(13))1.) Constraints() ->
- Constraints(0)
- .left
- .Column
- .Row
- .Operator
- .Value
- .right
- .Column
- .Row
- .left
- Constraints(1)
- Constraints(2) ... usw.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Ich vermute,
da ist ein Fehler an dieser Stelle:
Denn in der function werden ja, analog zur o.a. Diskussion bzgl. "Static", alle Variablen beim erneuten Aufruf genullt, wenn sie herkömmlich dimensioniert sind. Also auch Variables().
Sprich, du musst vermutlich dafür sorgen, dass die im ersten Lauf der function ermittelten Variables erhalten bleiben, und die des zweiten Laufes angehängt werden.
Entweder durch eine übergeordnete Variable, wie Counter... oder durch eine Static in der function.
Dabei aber nicht mit den Namen durcheinander kommen.
Ich kann es nicht ausprobieren, da mir das Dokument fehlt, und ich nicht im Nebel irgendwelche "Zielzelle","Wert","Limit" Zellen definieren kann
Gruß R
da ist ein Fehler an dieser Stelle:
Code: Alles auswählen
'Die Adressen der Variablen Zellen an den Solver uebergeben:
counterV = 0 'Nullsetzen des Variablenzaehlers
Variables() = F_get_solver_variables_from_named_Range("Mengen_001") 'Variable Zellen aus Berechnungen_001 ermitteln
Variables() = F_get_solver_variables_from_named_Range("Mengen_002") 'Variable Zellen aus Berechnungen_002 ermitteln
solv.Variables = Variables()Sprich, du musst vermutlich dafür sorgen, dass die im ersten Lauf der function ermittelten Variables erhalten bleiben, und die des zweiten Laufes angehängt werden.
Entweder durch eine übergeordnete Variable, wie Counter... oder durch eine Static in der function.
Dabei aber nicht mit den Namen durcheinander kommen.
Ich kann es nicht ausprobieren, da mir das Dokument fehlt, und ich nicht im Nebel irgendwelche "Zielzelle","Wert","Limit" Zellen definieren kann
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Ich kann mich nur wiederholen ...
R
mit Beispieldokument (ggf. verfremdet) vermutlich eine Sache von ein paar Minuten.F3K Total hat geschrieben:da mir das Dokument fehlt, und ich nicht im Nebel irgendwelche "Zielzelle","Wert","Limit" Zellen definieren kann
R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Hallo,
Habe Variables auch "oben" definiert.
Zum Verständnis: http://wiki.openoffice.org/wiki/Documen ... _Variables
Gruß R
Habe Variables auch "oben" definiert.
Zum Verständnis: http://wiki.openoffice.org/wiki/Documen ... _Variables
Gruß R
- Dateianhänge
-
- Makro2.ods
- (18.58 KiB) 232-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
eine sekündliche Überschneidung, hatte sie nochmal ausgetauscht ...
Du musst noch die Zeile löschen, sonst kommt ohne XRAY eine Fehlermeldung ...
Du musst noch die Zeile
Code: Alles auswählen
XRAY solv- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Nö/ja/auch
durch die Definition als "Public Domain/öffentliche Variable" stehen die vorgefüllten Variables und Constraints jetzt nach dem ersten Durchlauf der functions noch zur Verfügung und werden im zweiten Durchlauf weiter ge"redim preserved".
Da sie öffentlich sind, kann man von überall darauf zugreifen und braucht sie nicht mehr zu übergeben.
Gruß R
durch die Definition als "Public Domain/öffentliche Variable" stehen die vorgefüllten Variables und Constraints jetzt nach dem ersten Durchlauf der functions noch zur Verfügung und werden im zweiten Durchlauf weiter ge"redim preserved".
Da sie öffentlich sind, kann man von überall darauf zugreifen und braucht sie nicht mehr zu übergeben.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Hi,
dann kannst Du selber gucken ...
Gruß R
ich wiederhole mich?F3K Total hat geschrieben:Tipp: lerne XRAY oder MRI
- Installiere Xray
- füge diesen Code in dein Makro ein:
Code: Alles auswählen
xray constraints- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Servus
Offensichtlich schreibst Du erst ab Index 1 in Dein Constraints-Array. Starte stattdessen mit 0.
Offensichtlich schreibst Du erst ab Index 1 in Dein Constraints-Array. Starte stattdessen mit 0.
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Hallo,
das XRAY darf natürlich erst nach der Definition der Sonderbedingung kommen.
Wenn ich dann in Xray auf Constraints(0).left gehe:
Diese Adresse ist die der Zelle D1 auf Tabelle1, was wohl dem Namensbereich "Wert" entspricht!
und
Constraints(0).right
Diese Adresse ist die der Zelle B1 auf Tabelle1, was wohl dem Namensbereich "Limit" entspricht!
Also alles wie es sein soll. Die weiteren Bedingungen schaust Du selber nach?
Edit: Kannst Du besser Französisch als Englisch? Xray gibt auch in Englisch
Gruß R
das XRAY darf natürlich erst nach der Definition der Sonderbedingung kommen.
Code: Alles auswählen
'Nun die Sonderbedingung mit Ziffer 0
Constraints(0).Left = Allgemein.getCellRangeByName("Wert").CellAddress
Constraints(0).Operator = kleinergleich
Constraints(0).Right = Allgemein.getCellRangeByName("Limit").CellAddress
xray Constraints
'Dem Solver die Constraints uerbergeben
solv.Constraints = Constraints()Code: Alles auswählen
Column long 3
Row long 0
Sheet short 0 und
Constraints(0).right
Code: Alles auswählen
Column long 1
Row long 0
Sheet short 0Also alles wie es sein soll. Die weiteren Bedingungen schaust Du selber nach?
Edit: Kannst Du besser Französisch als Englisch? Xray gibt auch in Englisch
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: CalcSolver automatisch mit Variablen und Bedingungen fül
Moin,
Gruß R
Veto: Wie von DIR angedacht miamit, ich würde sowas nicht machen, zuviel Arbeit!miamit hat geschrieben:wie von dir angedacht, F3K,
Nicht, dass ich wüßte.miamit hat geschrieben:Kann man die Größe einer MsgBox festlegen, sodass bei 150 Variablen das PopUp nicht über dne ganzen Bildschirm läuft, sondern das PopUp klein ist und einen Scrollbalken hat?
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO