Funktion soll mehrere Werte an Calc-Zellen zurückgeben

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

Moderator: Moderatoren

saxo
**
Beiträge: 48
Registriert: Do, 01.04.2010 00:45

Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von saxo »

Hallo,
eine Funktion soll z.B. aus Calc-Zelle 1 aufgerufen werden.
Die Funktion soll 3 Werte berechnen und diese in die Zellen 1-3 der Calc-Tabelle schreiben.
Kann ich in Basic mehr als ein Wert zurückgeben?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von Stephan »

Die Funktion soll 3 Werte berechnen und diese in die Zellen 1-3 der Calc-Tabelle schreiben.
Kann ich in Basic mehr als ein Wert zurückgeben?
Es ist schon mehrfach hier im Forum thematisiert worden das sowas prinzipiell nicht geht, da beim Aufruf von (benutzerdefinierten) Funktion jeweils alle ZEllen der Tabelle, aus der der Aufruf erfolgt, schreibgeschützt sind. (Tabellen-)Funktionen liefern immer nur einen Rückgabewert in die Zelle zurück aus der sie aufgerufen werden. Eine Rückgabeaktion (z.B. das Schreiben von Werten in Zellen derselben Tabelle) ist mit aus Zellen aufgerufenen Funktionen prinzipiell nicht möglich, auch nicht das aktive SChreiben in die aufrufende Zelle selbst.




GRuß
Stephan
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von bst »

Morgen,

Du könntest eigene Matrixformeln schreiben. Das scheint mir in OOo Basic genauso zu funktionieren wie in Excel VBA.

cu, Bernd
--

Code: Alles auswählen

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

Option Explicit

Function SpaltenVektor() As Variant
   Dim ar(1)
   ar(0) = 3
   ar(1) = 4
   SpaltenVektor = ar
End Function

' oder so:
Function SpaltenVektor2() As Variant
   Dim ar(0, 1)
   ar(0, 0) = 8
   ar(0, 1) = 9
   SpaltenVektor2 = ar
End Function

Function ZeilenVektor() As Variant
   Dim ar(1, 0)
   ar(0, 0) = 1
   ar(1, 0) = 2
   ZeilenVektor = ar
End Function

Function myMatrix() As Variant
   Dim ar(1, 1)
   ar(0, 0) = "00"
   ar(0, 1) = "01"
   ar(1, 0) = "10"
   ar(1, 1) = "11"
   myMatrix = ar
End Function

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von Stephan »

Du könntest eigene Matrixformeln schreiben. Das scheint mir in OOo Basic genauso zu funktionieren wie in Excel VBA.
Soweit klar - danke für den HInweis.

Aber selbst wenn ich den Wunsch des NUtzers in die Zelle zu schreiben (darauf bezog sich meine Antwort) übersehe, kann ich doch auch nicht so ganz wirklich die Matrix-Formel nur aus Zelle 1 aufrufen, wie es gewünscht wurde, ja klar ist der Eintrag der Formel formal in eine Zelle möglich, nur in dem Moment wo die Formel übernommen wird erstreckt sie sich automatisch über mehrere Zeilen und kann dann auch nur noch zusammenhängend bearbeitet werden.
Kann aber gut sein ich bewerte den Schwerpunkt der Anfrage von "saxo" nur falsch, denn gegen die Matrix-Lösung spricht allgemein nichts.



Gruß
Stephan
saxo
**
Beiträge: 48
Registriert: Do, 01.04.2010 00:45

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von saxo »

Sorry Leute, ich bin zu doof.
Ich hab es genau so gemacht:
Function SpaltenVektor() As Double
Dim ar(2) As Double
ar(0) = 3
ar(1) = 6
ar(2) = 9
SpaltenVektor = ar
End Function

Jetzt rufe ich die Formel in einer Calc-Zelle auf:
=Spaltenvektor()
{=Spaltenvektor()} bzw. als Matrixformel

Es kommt immer der gleiche Fehler: Basic-Laufzeitfehler, Objektvariable nicht belegt.
Er scheint die Zeile SpaltenVektor = ar nicht zu verstehen
So kenn ichs auch von C, dass man einen Zeiger auf ein array übergibt, will aber nicht funktionieren....
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von Stephan »

Ich denke mal die FEhlermeldung dürfte irreführend sein. Im Kern darf wohl an der Stelle nicht als Double sondern nur als Variant übergeben werden:

Code: Alles auswählen

Function SpaltenVektor() As Variant
ich habs aber auf die SChnelle nicht überprüft.



GRuß
Stephan
saxo
**
Beiträge: 48
Registriert: Do, 01.04.2010 00:45

Re: Funktion soll mehrere Werte an Calc-Zellen zurückgeben

Beitrag von saxo »

Ihr seid Spitze.
Klar, es wird ja auch ein Zeiger zurückgegeben, den kann ich nicht als double deklarieren.
danke ergebenst
Antworten