Zugriff zwischen OLE Objekte

Das Textverarbeitungsprogramm

Moderator: Moderatoren

rammi
Beiträge: 9
Registriert: Do, 11.01.2018 08:44

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 14:59

Jetzt versuche ich die Geschichte als Funktion zu kapseln und dem entsprechenden Feld zuzuordnen, für alle Fälle hab ich eine einfache HALLOWELT() Funktion erstellt.

Code: Alles auswählen

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

Sub Main
With ThisComponent.getEmbeddedObjects
	.getByName("Objekt4").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("A1").Value = _
	.getByName("Objekt1").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("B3").Value
	.getByName("Objekt4").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("A2").Value = _
	.getByName("Objekt2").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("A3").Value
End With
End Sub

function HALLOWELT()
	HALLOWELT="Hallo Welt"
end function

function MYVALUE()
	MYVALUE=This.Component.getEmbeddedObjects().getByName("Objekt1").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("B3").Value
end function
test.odt
(32.57 KiB) 12-mal heruntergeladen
Dabei habe ich mich ans Handbuch gehalten, aber meine Funktionen kennt das aktuelle Projekt nicht. Die Funktionen liegen unter:
Extras->Makros->Makros verwalten->OpenOffice Basics->test-mitSchaltfläche.odt->Standard->Module1

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 15:58

Die Funktionen liegen unter:
Extras->Makros->Makros verwalten->OpenOffice Basics->test-mitSchaltfläche.odt->Standard->Module1
Das kann nicht funktionieren, weil sie dort im Textdokument gespeichert sind und nicht in den Calc-OLE-Objekten.
Benutzerdefinierte Funktionen (also Basic-Funktionen die direkt in Calc-Tabellenzellen aufrufbar sein sollen) müssen immer entweder im Calc-Dokument (das wäre hier sinngemäß das OLE-Objekt) oder in der globalen Bibliothek namens "Standard" (nur in dieser funktionieren sie) gespeichert sein.
Im Calc-Dokumen, also hier im OLE-Objekt speichern ist noch durchführbar (Doppelklick auf Objekt und dann im dort unter Extras-Makros-... sichtbaren Dokument Unbenannt... ablegen), aber die Funktionen funktionieren nicht bei Aufruf als einer Tabellenzelle (zumindest bei mir nicht). Deshalb bleibt nur der zweite Weg (Speichern in der globalen Bibliothek "Standard"), der bei mir, zumindest mit der ganz einfachen HALLOWELT()-Funktion auch klappt, aber ich weiß trotzdem nicht was ich von dem Ganzen (=benutzerdefinierte Funktionen in OLE-Objekten nutzen) halten soll, mir wäre das zu zweifelhaft das es zuverlässig funktioniert. Deshalb würde ich bei einem Makro bleiben und sofern das Makro automatisch gestartet werden soll sobald es Ändeerungen an den Quelltabellen (also OLE-Objekten) gibt, dem EReignis "Dokument aktivieren" des odt-Dokuments zu ordnen, weil dieses Ereignis zwangsläufig eintritt wenn man nach einer Änderung in einem OLE-Objekt dieses Objekt wieder verlässt. Beispiel anhängend.


Gruß
Stephan
Dateianhänge
test-mitEreignismakro.odt
(34.33 KiB) 11-mal heruntergeladen

rammi
Beiträge: 9
Registriert: Do, 11.01.2018 08:44

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Mo, 15.01.2018 09:53

Stephan hat geschrieben:
Fr, 12.01.2018 15:58
...bei einem Makro bleiben und sofern das Makro automatisch gestartet werden soll...dem EReignis "Dokument aktivieren" des odt-Dokuments zu ordnen...
So funktioniert es wie erwartet. Vielen Dank!

Antworten