Zugriff zwischen OLE Objekte
Moderator: Moderatoren
Zugriff zwischen OLE Objekte
Hallo,
in einem writer-Dokument habe ich verschiedene calc-Objekte als OLE eingebunden. Eine Tabelle beinhaltet alle Summen aus den einzelnen Tabellen. Wie kann ich auf die anderen Tabellen zugreifen, damit die Summe automatisch eingesetzt wird?
Ein Beispiel im Anhang
in einem writer-Dokument habe ich verschiedene calc-Objekte als OLE eingebunden. Eine Tabelle beinhaltet alle Summen aus den einzelnen Tabellen. Wie kann ich auf die anderen Tabellen zugreifen, damit die Summe automatisch eingesetzt wird?
Ein Beispiel im Anhang
Re: Zugriff zwischen OLE Objekte
z.B.:
Gruß
Stephan
Code: Alles auswählen
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
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
Also ich versuche das so nachzubauen, ohne Erfolg
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
With ThisComponent
.getEmbeddedObjects
.getByName("tblIdent")
.getCellRangeByName("A1")
.Value
End With
End Sub
Vielleicht gibt es die Möglichkeit, mein Beispiel mit der Antwort zu erweitern?aus sicherheitsgründen ist dieses makro nicht ausführbar
Re: Zugriff zwischen OLE Objekte
naja, an Deinem Makro ist auch nahezu nichts richtig, ich verstehe garnicht wie Du auf dieses Makro kommst.Also ich versuche das so nachzubauen, ohne Erfolg
Der nachfolgende Code ist auch nur ein Rudiment, da ich ja Dein Dokument nicht kenne, aber so muss es prinzipiell aussehen:
Code: Alles auswählen
Sub Main
With ThisComponent.getEmbeddedObjects
.getByName("tblIdent").getEmbeddedObject.Sheets().getByName("Tabelle1").getCellRangeByName("A1").Value
End With
End Sub
mutmaßlich weil die Makrosicherheitseinstellung auf hoch steht. Aktiviere unter Extras-Einstellungen-OpenOffice-Sicherheit Schaltfläche "Makrosicherheit" die Option für mittel oder niedrig. Bei "mittel" kommt später jedesmal bei Makros eine Nachfrage wo Du deren Ausführung zulassen musds, bei "niedrig" werden die Makros ohne Nachfrage immer ausgeführt.aus sicherheitsgründen ist dieses makro nicht ausführbar
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
Danke erstmal. Ich kenne mich mit Basic nicht aus, deshalb brauche ich Gehhilfe...
Also, ich habe deinen Code mal angepasst nach meinen Bedürfnissen, BASIC gibt Fehler: Methode nicht gefunden: getByName
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
With ThisComponent
.getEmbeddedObjects
.getByName("tblDusche") ' <---- BASIC-Fehler
'.getEmbeddedObject()
'.Sheets()
'.getByName("Tabelle1")
'.getCellRangeByName("summe")
'.Value
End With
End Sub
Re: Zugriff zwischen OLE Objekte
ja, weil der Code wieder völlig falsch ist. Warum änderst Du zum zweiten Mal meinen Code einfach beliebig ab und meinst das würde trotzdem funktionieren?Also, ich habe deinen Code mal angepasst nach meinen Bedürfnissen, BASIC gibt Fehler: Methode nicht gefunden: getByName
Die Fehlermeldung kommt weil dieser Code:
Code: Alles auswählen
With ThisComponent
.getEmbeddedObjects
.getByName("tblDusche") ' <---- BASIC-Fehler
End With
Code: Alles auswählen
ThisComponent.getEmbeddedObjects
ThisComponent.getByName("tblDusche")
Code: Alles auswählen
ThisComponent.getEmbeddedObjects.getByName("tblDusche")
Code: Alles auswählen
Sub Main
With ThisComponent
.getEmbeddedObjects.getByName("tblDusche").getEmbeddedObject().Sheets().getByName("Tabelle1").getCellRangeByName("summe").Value
End With
End Sub
Code: Alles auswählen
Sub Main
With ThisComponent
With .getEmbeddedObjects
With .getByName("tblDusche")
With .getEmbeddedObject()
With .Sheets()
With .getByName("Tabelle1")
With .getCellRangeByName("summe")
.Value
End With
End With
End With
End With
End With
End With
End With
End Sub
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
Ok, da ich schon schrieb, keine BASIC-Erfahrungen zu haben, hab ich da eben was durcheinander gebracht... Ich dachte der Punkt gilt auch über Zeilen als Verkettung. Wegen besserer Übersicht habe das dann so geschrieben und so offensichtlich die BASIC typische Kette auseinandergerissen...
Jetzt kommt der Code durch bis zum Value
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
With ThisComponent
With .getEmbeddedObjects
With .getByName("tblDusche")
With .getEmbeddedObject()
With .Sheets()
With .getByName("Tabelle1")
With .getCellRangeByName("summe")
.Value '<---- BASIC Exception
End With
End With
End With
End With
End With
End With
End With
End Sub
'Sub Main
'With ThisComponent
' .getEmbeddedObjects.getByName("tblDusche").getEmbeddedObject().Sheets().getByName("Tabelle1").getCellRangeByName("summe").Value
'End With
'End Sub
Ich weiß nicht welches Element nicht gefunden wird. Der entsprechenden Zelle habe ich den Namen 'summe' gegebenBASIC-Laufzeitfeher:
Es ist eine Exception aufgetreten
Type: com.sun.star.container.NoSuchElementException
Re: Zugriff zwischen OLE Objekte
entweder der benannte Bereich "summe" existiert nicht, ist größer als 1 Zelle oder OO macht Probleme wegen des Namens (weil Summe auch der Name einer Tabellenfunktion ist würde ich das nicht als Namen für einen Bereich verwenden)Jetzt kommt der Code durch bis zum Value
ich würde zu debuggen statt des
Code: Alles auswählen
.Value
Code: Alles auswählen
Msgbox .dbg_properties
Gruß
Stephan
- Dateianhänge
-
- dbg-cellobject.gif (8.8 KiB) 5381 mal betrachtet
Re: Zugriff zwischen OLE Objekte
habe ich gerade ausprobiert, "summe" macht als Name für einen Zellbereich keine Probleme (gestestet OOo 3.3.0)oder OO macht Probleme wegen des Namens (weil Summe auch der Name einer Tabellenfunktion ist würde ich das nicht als Namen für einen Bereich verwenden)
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
Stephan hat geschrieben: ↑Fr, 12.01.2018 10:50 ...
ich würde zu debuggen statt des ...
in den Code schreiben:
Code: Alles auswählen
Msgbox .dbg_properties
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
With ThisComponent
With .getEmbeddedObjects
With .getByName("tblDusche")
With .getEmbeddedObject()
With .Sheets()
With .getByName("Tabelle1")
With .getCellRangeByName("summe")
Msgbox .dbg_properties
End With
End With
End With
End With
End With
End With
End With
End Sub
Re: Zugriff zwischen OLE Objekte
Sorry, aber entweder Du stellst die Datei zur Verfügung oder hier ist leider Schluss.
Es ist Unsinn das wir hier im Forum per Blindflug Deinen Code debuggen sollen, denn um vernünftig debuggen zu können muss man selber alles vor Augen haben.
raten könnte man derzeitig das es z.B. garkeine Tabelle namens "Tabelle1" gibt und/oder der benannte Zellbereich "summe" sich nicht in Tabelle1 befindet.
Gruß
Stephan
Es ist Unsinn das wir hier im Forum per Blindflug Deinen Code debuggen sollen, denn um vernünftig debuggen zu können muss man selber alles vor Augen haben.
raten könnte man derzeitig das es z.B. garkeine Tabelle namens "Tabelle1" gibt und/oder der benannte Zellbereich "summe" sich nicht in Tabelle1 befindet.
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
Sorry Stephan, ich habe oben eine Test Datei zur Verfügung gestellt was in etwa mein Dokument abbildet. Ich hatte schon zuvor gebeten, dieses Dokument als Vorlage zu nehmen um eine Lösung darauf abzubilden... Warum muss ich nun in Gefahr laufen, das "hier Schluss" ist, obwohl es völlig unnötig ist, mein reales Projekt hier einzustellen?!
Um mal abzuwiegeln, OpenOffice ist ein Programm, welches nicht im Vordergrund NICHT(!) die BASIC-Programmierung voraussetzt. Du scheinst ja jemand zu sein, welcher sich mit BASIC auskennt, warum füllst du nicht schnell mein test-Beispiel auf?
Re: Zugriff zwischen OLE Objekte
Und für genau dieses Dokument hatte ich einen passenden Code gepostet der funktioniert. Mehr geht an der Stelle nicht.Sorry Stephan, ich habe oben eine Test Datei zur Verfügung gestellt was in etwa mein Dokument abbildet. Ich hatte schon zuvor gebeten, dieses Dokument als Vorlage zu nehmen um eine Lösung darauf abzubilden...
Alle späteren Problem haben doch damit zu tun das sie sich offensichtlich nicht mehr auf die ursprüngliche Datei beziehen.
genau das habe ich bereits getan, der gepostete Code passt ganz genau auf Deine Beispiel-DAtei. z.B. berücksichtigt der Code auch die Besonderheit das dort 4 OLE-Objekte sind obwohl man direkt nur 3 sieht.warum füllst du nicht schnell mein test-Beispiel auf?
Gruß
Stephan
Re: Zugriff zwischen OLE Objekte
hier der ursprüngliche Code in die Testdatei integriert
Gruß
Stephan
Gruß
Stephan
- Dateianhänge
-
- test-mitSchaltfläche.odt
- (35.08 KiB) 94-mal heruntergeladen