[Calc] Aktuelle Zelle als Parameter übergeben

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

Moderator: Moderatoren

stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

[Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Hallo,

ich möchte eine Funktion programmieren, die von einer Zelle aus aufgerufen wird,
und zwar mit folgenden beiden Argumenten:
- eine beliebige Zahl
- Zelle des Funktionsaufrufs (z.B. B6)

Klappt das so in der Art?

Code: Alles auswählen

Function MeineFunktion(Zahl As Integer, Zelle As Object)

End Function
Ich glaube nicht, denn beim Aufruf mit "=MEINEFUNKTION(40, B6)" erhalte ich "Err:509".

Zusatzfrage 1: Wie kann ich in der Funktion etwas in die Zelle genau unterhalb der
übergebenen Zelle schreiben (also die Zeile um 1 erhöhen)?

Zusatzfrage 2: Kann ich auch direkt in der Funktion feststellen, von welcher Zelle
sie aufgerufen wurde? Dann könnte ich mir den Parameter ja sparen.

Danke!


stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo
stem hat geschrieben: ich möchte eine Funktion programmieren, die von einer Zelle aus aufgerufen wird,
und zwar mit folgenden beiden Argumenten:
- eine beliebige Zahl
- Zelle des Funktionsaufrufs (z.B. B6)

Klappt das so in der Art?

Code: Alles auswählen

Function MeineFunktion(Zahl As Integer, Zelle As Object)

End Function
Ich glaube nicht, denn beim Aufruf mit "=MEINEFUNKTION(40, B6)" erhalte ich "Err:509".
Im Prinzip geht das, -aber- eben nicht genau aus der Zelle die du als Argument übergibst. Funktionen können nicht in die übergebenden Zellen geschrieben werden, da sie in diesem Fall deren bisherigen Inhalt überschreiben. ...
stem hat geschrieben: Zusatzfrage 1: Wie kann ich in der Funktion etwas in die Zelle genau unterhalb der
übergebenen Zelle schreiben (also die Zeile um 1 erhöhen)?
... von daher bietet es sich an die Funktion gleich in die "übernehmende" Zelle B7 einzutragen. z.b.in B7:
=MEINEFUNKTION(40;B6)
stem hat geschrieben: Zusatzfrage 2: Kann ich auch direkt in der Funktion feststellen, von welcher Zelle
sie aufgerufen wurde? Dann könnte ich mir den Parameter ja sparen.
... damit dürfte auch dieses Problem gelöst sein ?
Falls nicht, beschreib nochmal detaillierter was deine Funktion den genau tun soll.

Gruß Karo
Zuletzt geändert von Karolus am Mi, 14.11.2007 15:41, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Karolus hat geschrieben: ... von daher bietet es sich an die Funktion gleich in die "übernehmende" Zelle B7 einzutragen. z.b.in B7:
=MEINEFUNKTION(40, B6)
Danke. OpenOffice reduziert das bei mir aber automatisch zu "=MEINEFUNKTION(40 B6)" (also Komma weg)
und spuckt wieder den Fehler 509 aus.

Zusatz: Sobald ich das Komma in ein Semikolon ändere, kommt die Fehlermeldung "Laufzeitfehler.
Objektvariable nicht belegt"

Ich würde gerne 6 Zellen (untereinander) beschreiben. Wie kann ich dynamisch in der Funktion von
der Zelle in die nächsten Zeilen kommen? Und wie lautet genau der Funktionsaufruf zum Schreiben in die
Zelle? Danke!

Sorry für die Newbie-Fragen. :wink:


stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo Friedhelm
Sorry, mein Fehler
In der Zelle muss die Funktion mit ; -semicolon als Parametertrenner geschrieben werden:
=MEINEFUNKTION(40;B6)
ohne irgendwelche Leerzeichen !
(Die Definition der Funktion in Basic aber mit Komma)

Gruß Karo
Ps. Ich werde es oben berichtigen
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Danke.

Jetzt weiß ich nur noch nicht, wie ich (ohne Fehlermeldung) die Position einer
Zelle als Argument übergeben kann.


stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo Stem

Poste mal den Basic-Code deiner Funktion, die Fehlermeldung "Laufzeitfehler - Objektvariable nicht belegt" deutet auf einen Fehler im Code hin.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Der Fehler kommt schon, wenn nur der Rumpf der Funktion wie folgt dasteht:

Code: Alles auswählen

Function MeineFunktion(Zahl As Integer, Zelle As Object)

End Function

stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo stem
Lass die Deklarierung hinter 'Zelle' weg.
Function MeineFunktion(Zahl As Integer, Zelle)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Danke! Wenn ich jetzt die Antwort auf meine "Zusatzfrage 1" wissen würde, und wie ich in der Funktion nun etwas in diese Zelle(n) schreiben kann, wäre ich wunschlos glücklich! Merci. :wink:


stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo stem
Du möchtest also eine Funktion programmieren, weisst aber noch nicht was sie tun soll und möchtest von uns erfahren wie sie das tut ;-)
Ich versuchs mal mit 2 Beispielen:

Code: Alles auswählen

function mymultiplikation(zahl , zelle)
mymultiplikation = zahl * zelle
end function
die Funktion multipliziert die beiden Werte die du übergibst.(egal ob direkt als Zahl und/oder als Zelladdresse)

möchtest du mit der Funktion gleich mehrer Zellen füllen dann bsplw.:

Code: Alles auswählen

Function plus1bis4mal(Zahl , Zelle)
dim bereich()
bereich() = array((zahl+1)*zelle,(zahl+2)*zelle,(zahl+3)*zelle,(zahl+4)*zelle)
plus1bis4mal = bereich()
End Function
Die Funktion addiert zu 'zahl' die Werte 1 bis 4 und multipliziert danach mit 'zelle', und schreibt die Ergebnisse in 4 Zellen nebeneinander. ( ! die Funktion musst du als Arrayfunktion abschliessen, mit Strg+Shift+Enter oder durch anhaken der entsprechenden Option im Funktionserstellungsfenster)

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Hallo,

ich glaube, wir reden aneinander vorbei. :D

Ich weiß ganz genau, was meine Funktion machen soll, nur komme ich mit der "Ausgabe" noch nicht klar.
Irgendwo in einer leeren, unbenutzten Zelle möchte ich schreiben: "=MEINEFUNKTION(40,H4)".

Diese Funktion soll nun in das Feld H4 (was ja nicht identisch mit der Zelle ist, in der der Funktionsaufruf
steht) die Zahl 40 schreiben, in H5 die Zahl 41 und in H6 die Zahl 42 (beispielsweise), also beginnend von
der als 2. Argument übergebenen "Koordinaten" in die Zellen darunter.

Die Koordinaten möchte ich als Parameter übergeben und nicht im Code selbst bereithalten, so dass die
Funktion universell einsetzbar ist.

Der Code

Code: Alles auswählen

mymultiplikation = zahl * zelle
überschreibt ja "nur" die Zelle mit dem Funktionsaufruf, was ich nicht möchte, hast Du ja schon
weiter oben selbst geschrieben:
Im Prinzip geht das, -aber- eben nicht genau aus der Zelle die du als Argument übergibst. Funktionen können nicht in die übergebenden Zellen geschrieben werden, da sie in diesem Fall deren bisherigen Inhalt überschreiben. ...
Ich hoffe, jetzt ist mein "Problem" sonnenklar.


Vielen Dank nochmals! :wink:

stem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von Karolus »

Hallo stem

als Ergänzung: ein Calc-Funktion, ! die in einer Zelle steht ! , schreibt das Ergebniss grundsätzlich in die gleiche Zelle, andere Zellen sind während der Funktionausführung in dieser Form gesperrt.
Wenn du das umgehen willst (also per Funktion in andere Zellen Schreiben willst) musst du die Funktion mit einem Tastaturkürzel oder über eine Schaltfläche aufrufen mit evtl. zusätzlich einem Dialog zur Eingabe der Variablen.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
stem
*
Beiträge: 14
Registriert: Do, 18.10.2007 17:20

Re: [Calc] Aktuelle Zelle als Parameter übergeben

Beitrag von stem »

Ah ok, danke!
Antworten