Zugriff zwischen OLE Objekte

Das Textverarbeitungsprogramm

Moderator: Moderatoren

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

Zugriff zwischen OLE Objekte

Beitrag von rammi » Do, 11.01.2018 08:56

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
test.odt
(32.57 KiB) 26-mal heruntergeladen

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Do, 11.01.2018 09:32

z.B.:

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

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Do, 11.01.2018 11:42

Stephan hat geschrieben:
Do, 11.01.2018 09:32
z.B.:
...
Gruß
Stephan
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
Antwort
aus sicherheitsgründen ist dieses makro nicht ausführbar
Vielleicht gibt es die Möglichkeit, mein Beispiel mit der Antwort zu erweitern?

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Do, 11.01.2018 21:17

Also ich versuche das so nachzubauen, ohne Erfolg
naja, an Deinem Makro ist auch nahezu nichts richtig, ich verstehe garnicht wie Du auf dieses Makro kommst.

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
aus sicherheitsgründen ist dieses makro nicht ausführbar
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.


Gruß
Stephan

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 07:50

Stephan hat geschrieben:
Do, 11.01.2018 21:17
Der nachfolgende Code ist auch nur ein Rudiment ..., aber so muss es prinzipiell aussehen...
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

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 10:01

Also, ich habe deinen Code mal angepasst nach meinen Bedürfnissen, BASIC gibt Fehler: Methode nicht gefunden: getByName
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?

Die Fehlermeldung kommt weil dieser Code:

Code: Alles auswählen

With ThisComponent
	.getEmbeddedObjects		
  	.getByName("tblDusche") ' <---- BASIC-Fehler
	
End With
dem hier entspricht:

Code: Alles auswählen

ThisComponent.getEmbeddedObjects
ThisComponent.getByName("tblDusche")
Du aber brauchst:

Code: Alles auswählen

ThisComponent.getEmbeddedObjects.getByName("tblDusche")
Also wirst Du den Code schon so schreiben müssen wie das richtig ist, nämlich:

Code: Alles auswählen

Sub Main
With ThisComponent
	.getEmbeddedObjects.getByName("tblDusche").getEmbeddedObject().Sheets().getByName("Tabelle1").getCellRangeByName("summe").Value
End With
End Sub
Oder meinethalben auch (was aber praktisch niemand so tut und was ich gänzlich ungewöhnlich fände):

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

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 10:26

Stephan hat geschrieben:
Fr, 12.01.2018 10:01
...Also wirst Du den Code schon so schreiben müssen wie das richtig ist, nämlich...
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
mit dem Fehler:
BASIC-Laufzeitfeher:
Es ist eine Exception aufgetreten
Type: com.sun.star.container.NoSuchElementException
Ich weiß nicht welches Element nicht gefunden wird. Der entsprechenden Zelle habe ich den Namen 'summe' gegeben

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 10:50

Jetzt kommt der Code durch bis zum Value
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)

ich würde zu debuggen statt des

Code: Alles auswählen

.Value
in den Code schreiben:

Code: Alles auswählen

Msgbox .dbg_properties
dann werden die Eigenschaften des (vermeintlichen) Zellrange-Objekts angezeigt. Dort muss, wenn im Konkreten das richtige Objekt angesprochen wird, stehen "ScCellObj":



Gruß
Stephan
Dateianhänge
dbg-cellobject.gif
dbg-cellobject.gif (8.8 KiB) 2017 mal betrachtet

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 10:54

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)
habe ich gerade ausprobiert, "summe" macht als Name für einen Zellbereich keine Probleme (gestestet OOo 3.3.0)


Gruß
Stephan

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 11:27

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
gibt weiterhin Fehler...
forum.JPG
forum.JPG (51.6 KiB) 2005 mal betrachtet

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 11:57

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

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 12:16

Stephan hat geschrieben:
Fr, 12.01.2018 11:57
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....
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?

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 12:26

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...
Und für genau dieses Dokument hatte ich einen passenden Code gepostet der funktioniert. Mehr geht an der Stelle nicht.

Alle späteren Problem haben doch damit zu tun das sie sich offensichtlich nicht mehr auf die ursprüngliche Datei beziehen.

warum füllst du nicht schnell mein test-Beispiel auf?
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.


Gruß
Stephan

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

Re: Zugriff zwischen OLE Objekte

Beitrag von Stephan » Fr, 12.01.2018 12:39

hier der ursprüngliche Code in die Testdatei integriert


Gruß
Stephan
Dateianhänge
test-mitSchaltfläche.odt
(35.08 KiB) 23-mal heruntergeladen

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

Re: Zugriff zwischen OLE Objekte

Beitrag von rammi » Fr, 12.01.2018 13:34

Stephan hat geschrieben:
Fr, 12.01.2018 12:39
hier der ursprüngliche Code in die Testdatei integriert
Danke, damit komme ich tatsächlich erstmal weiter

Antworten