Basic-Funktion wird nur einmal aufgerufen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Brischniak
*
Beiträge: 10
Registriert: Di, 08.03.2016 06:31

Basic-Funktion wird nur einmal aufgerufen

Beitrag von Brischniak »

Hallo,

ich arbeite mit OpenOffice Basic, um Makros in mein Calc-Dokument einzubinden.

Die Funktion

Code: Alles auswählen

Function Aendere_Eintrag(x)
with thisComponent.sheets.getByIndex(0)
.getCellRangeByName("A2").value=x
end with
End Function
soll den Eintrag in A2 in Abhängigkeit von A1 ändern.

Wenn ich also bspw. in B1

Code: Alles auswählen

Aendere_Eintrag(A1)
eintrage, soll jedesmal über das Makro der Inhalt von A2 aktualisiert werden, wenn sich A1 ändert.

Das funktioniert aber leider nur beim allerersten Mal (bzw. beim Öffnen des Dokuments). Wenn ich danach nochmal den Wert in A1 ändere, verändert sich A2 nicht, das Makro wird also offenbar nur bei der Initialisierung des Dokuments aufgerufen. Woran liegt das?

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

Re: Basic-Funktion wird nur einmal aufgerufen

Beitrag von Stephan »

Das funktioniert aber leider nur beim allerersten Mal (bzw. beim Öffnen des Dokuments).
Das wundert mich sehr, denn es sollte garnicht funktionieren.
Wenn ich danach nochmal den Wert in A1 ändere, verändert sich A2 nicht, das Makro wird also offenbar nur bei der Initialisierung des Dokuments aufgerufen. Woran liegt das?
Das es unmöglkich ist auf diese Weise in OpenOffice Calc Zellwerte zu ändern, weil der aktive Schreibzugriff auf eine Zelle für eine aus einer Zellformel aufgerufene benutzerdefinierte Funktion von Calc automatisch gesperrt wird.

Es ist nur die Rückgabe eines Funktionswertes möglich in der Zelle in welcher die benutzerdefinierte Funktion aufgerufen wird, also z.B.:

Code: Alles auswählen

Function Aendere_Eintrag(x)
	Aendere_Eintrag = x
End Function
und in A2 [sic]:

=Aendere_Eintrag(A1)


Was im Konkreten wenig Sinn macht, denn da in der benutzerdefinierten Funktion nichts berechnet wird, könnte man gleich =A1 in A2 schreiben.


Gruß
Stephan
Brischniak
*
Beiträge: 10
Registriert: Di, 08.03.2016 06:31

Re: Basic-Funktion wird nur einmal aufgerufen

Beitrag von Brischniak »

Hallo Stephan,

danke für deine Antwort. Ich habe es gerade nochmal getestet und beim Öffnen des Dokuments bekommt tatsächlich A1 den gleichen Wert wie A2. Also beim Öffnen scheint das Makro zu wirken.

Ich beschreibe mein Problem mal ein bisschen ausführlicher:
Ich versuche, ein Dokument zu erstellen, bei dem der Anwender die Sprache selbst auswählen kann. In A2 steht dann eine Zahl, die die Sprache definiert (1=Deutsch, 2=Englisch). A1 soll eine Zelle sein, in die der Anwender eine Eingabe machen kann, wie z.B. "Deutschland". Und wenn er dann die Sprache (durch Ändern des Wertes in A2) nachträglich verändert, wird die Zelle A1 bspw. automatisch in "Germany" geändert.

Deswegen kann ich nicht einfach in A1 eine Formel schreiben, sondern muss den Zellenwert über ein Makro ändern.

(Zur Vereinfachung des Problems soll nun A1 einfach nur den Wert von A2 erhalten.)

Wie kann ich das über ein Makro erreichen?

Gruß
Brischniak
Brischniak
*
Beiträge: 10
Registriert: Di, 08.03.2016 06:31

Re: Basic-Funktion wird nur einmal aufgerufen

Beitrag von Brischniak »

Ich habe das jetzt durch ein zusätzliches Tabellenblatt gelöst, das nur für die Spracheingabe zuständig ist. Da der von Stephan beschriebene Zellschutz wohl nur für das aktive Tabellenblatt wirkt, können die Zellen aller anderen Tabellenblätter durch Makros verändert werden.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Basic-Funktion wird nur einmal aufgerufen

Beitrag von Stephan »

Ich beschreibe mein Problem mal ein bisschen ausführlicher:
Ich versuche, ein Dokument zu erstellen, bei dem der Anwender die Sprache selbst auswählen kann. In A2 steht dann eine Zahl, die die Sprache definiert (1=Deutsch, 2=Englisch). A1 soll eine Zelle sein, in die der Anwender eine Eingabe machen kann, wie z.B. "Deutschland". Und wenn er dann die Sprache (durch Ändern des Wertes in A2) nachträglich verändert, wird die Zelle A1 bspw. automatisch in "Germany" geändert.

Deswegen kann ich nicht einfach in A1 eine Formel schreiben, sondern muss den Zellenwert über ein Makro ändern.

(Zur Vereinfachung des Problems soll nun A1 einfach nur den Wert von A2 erhalten.)

Wie kann ich das über ein Makro erreichen?

z.B. Ordne das Makro dem Ereignis "Inhalt geändert" des Tabellenblattes zu (Kontextmenü des Tabellenregisters, dort "Tabellenereignisse), die Funktion kannnst Du hierzu weiternutzen:

Code: Alles auswählen

Sub aufruf()
x = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1").Value	
Aendere_Eintrag(x)
End Sub

Function Aendere_Eintrag(x)
with thisComponent.sheets.getByIndex(0)
.getCellRangeByName("A2").value=x
end with
End Function

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

Re: Basic-Funktion wird nur einmal aufgerufen

Beitrag von Stephan »

Da der von Stephan beschriebene Zellschutz wohl nur für das aktive Tabellenblatt wirkt, können die Zellen aller anderen Tabellenblätter durch Makros verändert werden.
Durch Makros können Zellen imer geändert werden, meine Aussage bezog sich nur auf eine Basic-Funktion (sog. benutzerdefinierte Funktion) und Aufruf Dieser mit einer Calc-Tabellenformel.


Gruß
Stephan
Antworten