Hallo Thomas,
danke für die Erklärungen.
Aber dennoch habe ich das Problem. Ich habe den Begriff der globalen Variablen falsch verstanden; okey. Ich versuche mal das Problem zu schildern.
Ich habe in meiner Tabelle ein Blatt [Einstellungen], in diesem Blatt stehen Werte. Von diesen Werten hängt es ab, wie sich Funktionen die im Blatt [Daten] angewendet werden verhalten.
Nun will ich die Werte fest speichern, sodaß jede Sub / jedes Makro auf diese Werte zugreifen kann.
Zum Beispiel
In [Einstellungen](D5) steht die max. Geschwindigkeit.
Die will ich auslesen mit einem Makro [ReadGeschwindigkeit].
Auf einem zweiten Tabellenblatt stehen Geschwindigkeitswerte. Dahinter wird in Abhängigkeit von der max. Geschwindigkeit eine Formel berechnet; die eben eine Fallunterscheidung oder Verzweigung macht, je nachdem, ob die "gelesene" max. Geschwindigkeit sagen wir größer 100 ist, oder nicht. Das heißt die Formel soll in Abhängigkeit der Max.Geschwindigkeit etwas berechnen.
Mein Problem ist nun, daß ich ca. 30 solche Einstellungsvariablen habe, die ich nicht einfach als Paramter übergeben kann oder will.
Die Lösung die Du vorgeschlagen hast ist deshalb schwer umsetzbar, weil Funktionen mit den gelesenen Werten arbeiten müssen.
Ich könnte natürlich Konstanten am Anfang des Dokumentes fest vorgeben, dann kann die Berechnung vom benutzer allerdings nichtmehr gesteuert werden.
Nochmal kurz und knapp:
Gibt es eine Möglichkeit Werte aus einem Tabellenblatt auszulesen und diese Werte in eine andere Berechnung einer Funktion einfließen zu lassen, ohne daß die Funktion selbst die Tabellenwerte jedes mal neu abfragen muß (also die Werte solange erhalten bleiben, bis sie neu geladen werden).
Die Funktionen die auf den gelesenen Werten arbeiten werden nämlich sehr of aufgerufen und ich wollte nicht bei jeder Berechnung wieder auf das Tabellenblatt zugreifen müssen, u.a. um die Berechnungen schneller zu machen.
Konkret:
Code: Alles auswählen
Sub LeseEinstellungen
...
a = otabell.getCellByRange(1,2)
.
.
.
z = otabell.getCellByRange(1,27)
End Sub
Function f(x1 as double,x2 as double) as double
erg = x1 + x2
if (a > 0) then
erg = erg * a
else
erg = erg * a*a
end if
End Fucntion
Wo und wie soll ich nun die Variablen [a] bis [z] definieren?
Die Funktion f soll dabei während der gesamten Sitzung korrekte Ergebnisse liefern (und nicht mit den Werten a = b = ... = z = 0 rechnen).
Zudem muß f im gesamten Tabellendokument als Funktion in einer beliebigen Zelle anwendbar sein.
Ich will keine Parameterübergabe wegen der Anzahl und Bedeutung der Variablen verweden. Hier sieht es aus als seien [a] bis [z] Parameter; in wirklichkeit hat die Funktion f noch eigene Parameter x1 bis xn.
[a] bis [z] sollen also keine Parameter der Funktion f sein, die Berechnung hängt dennoch von ihnen ab.
**************************************************************************************
In Java wären [a] - [z] statische Variablen in einer Klasse, die während des gesamten Programms in jeder beliebigen Klasse verfügbar sind;
Code: Alles auswählen
public ?static? class Einstell
{
public static final int einstell1 = 7
.
.
.
public static final int einstell30 = 4
}
// final enspricht const - das sind aber trotzdem Variablen! - nach Java Konvention
damit kann man dann in der Main-Routine rechnen:
Code: Alles auswählen
public class Run
{
public static void main(String[] args)
{
Einstell.einstell1 = Einstell.einstell2 * Einstell.einstell3
int a = 5;
if(Einstell.einstell1 > 4) then a-- else a++
System.out.println(a);
...
}
}
So sähe das glaube ich in
Java aus; Bei dem [?static?] bin ich selbst jetzt nicht ganz sicher.
Hier will ich diese Variablen solange zur Verfügung haben, wie meine Tabellendatei geöffnet ist.
Danke für die Mühe und Antworten
Christian Marquardt
PS: Das Buch [Makros für OOo 2.0] liegt vor mir, hilft mir aber in dem Punkt leider auch nicht weiter... =(