Übergabe von Zelle als Objekt in eigener Funktion

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

drbrode
**
Beiträge: 40
Registriert: Di, 29.11.2016 14:10

Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von drbrode »

Hallo,

ich brauche mal bitte kurz eure Hilfe.

In calc lassen sich über die Makro-Programmierung ja eigene Funktionen erstellen, die man dann über die entsprechenden Befehle in der Tabelle verwenden kann.

Z.B.

Code: Alles auswählen

function ADDIEREN (a, b)
ADDIEREN = a + b
end function
Die Parameter a und b kann man dann in der Tabelle durch Zellbezüge angeben.

Z.B.

Code: Alles auswählen

=ADDIEREN(A1;B2)
Dabei werden allerdings immer die Zellinhalte an die Funktion übergeben.

Ist es auch möglich an dieser Stelle die Zelle als Objekt zu übergeben? Wenn ja, wie geht das?

Falls die Frage kommt: Ich möchte gerne per Formel in der Tabelle die Notiz einer Zelle auslesen.

Code: Alles auswählen

function KOMMENTAR(myCell as object)
KOMMENTAR = thisComponent.currentController.getActiveSheet.getCellRangebyName(myCell).annotation.string
end function
Danke für jede Hilfe!
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von F3K Total »

Moin,
du brauchst nicht das Zellen-Objekt, es reicht wenn du den Zielzellennamen als String übergibst.
Im Tabellenblatt schreibst du in eine beliebige Zelle

Code: Alles auswählen

=KOMMENTAR(ZELLE("ADRESSE";A1))
um den Kommentar der Zelle A1 mit dieser UDF auszulesen:

Code: Alles auswählen

function KOMMENTAR(myCell as String)
    KOMMENTAR = thisComponent.currentController.getActiveSheet.getCellRangebyName(myCell).annotation.string
end function
So kannst du die Formel sogar "herunterziehen"
Gruß R
drbrode
**
Beiträge: 40
Registriert: Di, 29.11.2016 14:10

Re: Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von drbrode »

Danke, so klappt das sehr gut...

...nur leider nur bis zu einem Neustart des Dokuments. Danach werden in allen Zellen, die die neue Formel enthalten Fehler angezeigt. Erst nah einer ktualisierung sind die Ergebnisse dann wieder korrekt. Komisch...
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von Stephan »

drbrode hat geschrieben: Do, 19.12.2019 14:24 Danke, so klappt das sehr gut...

...nur leider nur bis zu einem Neustart des Dokuments. Danach werden in allen Zellen, die die neue Formel enthalten Fehler angezeigt. Erst nah einer ktualisierung sind die Ergebnisse dann wieder korrekt. Komisch...
CurrentController ist zum Zeitpunkt wo die Formel bei Start berechnet wird noch nicht verfügbar.

Eine mögliche Lösung wäre:

Code: Alles auswählen

=KOMMENTAR(ZELLE("ADRESSE";A1)&"-"&ZELLE("SHEET";A1))
mit benutzerdefinierter Funktion:

Code: Alles auswählen

function KOMMENTAR(myCell as String)
    x = Split(myCell,"-") 
    KOMMENTAR = ThisComponent.Sheets.getByIndex(VAL(x(1))-1).getCellRangebyName(x(0)).annotation.string
end function

Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von F3K Total »

Hallo zusammen,
Stephan hat geschrieben: Do, 19.12.2019 20:49 Eine mögliche Lösung wäre: ...
Eine weitere ... Man kann einer Benutzerdefinierten Funktion mehrere Argumente übergeben, dann wäre eine weitere Möglichkeit:
Formel in der Zelle:

Code: Alles auswählen

=KOMMENTAR(ZELLE("ADRESSE";A1);ZELLE("SHEET";A1))
UDF:

Code: Alles auswählen

function KOMMENTAR(myCell as String, mySheet as integer)
    KOMMENTAR = ThisComponent.Sheets.getByIndex(mySheet-1).getCellRangebyName(myCell).annotation.string
end function
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Übergabe von Zelle als Objekt in eigener Funktion

Beitrag von Stephan »

es wäre schön wenn man die CELL()-Funktion direkt in der benutzerdefinierte Funktion nutzen könnte (http://www.dannenhoefer.de/faqstarbasic ... l#Zweig229), dann müsste man nur "A1" übergeben, mir ist das aber nicht gelungen.


Gruß
Stephan
Antworten