Seite 1 von 2

Zugriff zwischen OLE Objekte

Verfasst: Do, 11.01.2018 08:56
von rammi
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) 80-mal heruntergeladen

Re: Zugriff zwischen OLE Objekte

Verfasst: Do, 11.01.2018 09:32
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Do, 11.01.2018 11:42
von rammi
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?

Re: Zugriff zwischen OLE Objekte

Verfasst: Do, 11.01.2018 21:17
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 07:50
von rammi
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 10:01
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 10:26
von rammi
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 10:50
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 10:54
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 11:27
von rammi
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) 4916 mal betrachtet

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 11:57
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 12:16
von rammi
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?

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 12:26
von Stephan
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

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 12:39
von Stephan
hier der ursprüngliche Code in die Testdatei integriert


Gruß
Stephan

Re: Zugriff zwischen OLE Objekte

Verfasst: Fr, 12.01.2018 13:34
von rammi
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