Seite 1 von 1

Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 09:05
von evac
Hallo zusammen,

ich steh hier vor einem für mich ernsten Problemchen. Eventuell ist die Lösung jedoch total einfach.

Ich habe eine Vorlage für ein Writer-Dokument (.ott), die ein Makro enthält, welches beim -Dokument Erzeugen- Event ausgelöst werden soll.

Das geschieht auch anstandslos, falls ich das Dokument über einen Doppelklick im Datei-Explorer unter Windows öffne.
Sodann wird OpenOffice-Writer gestartet, es erscheint der Hinweis von wegen dieses Dokument enthält ein Makro und ein neues Dokument wird aus der Vorlage erzeugt.


Allerdings wird das Makro nicht ausgeführt, wenn ich die Vorlage aus LotusNotes heraus per OLE-Automation öffne. Und das ist hinreichend blöd.
Gehe ich in dem erzeugten Dokument über Extras - Makros usw., wähle das Makro -Main- und klicke auf -Ausführen- erscheint die Meldung

Aus Sicherheitsgründen ist dieses Makro nicht ausführbar


Vielleicht noch ein paar Daten
OpenOffice-Version 2.2.0
Lotus Notes Version 7.0.1

Ich öffne die Vorlage aus Notes heraus, da hier erstmal Daten gesammelt werden, die dann in das erzeugte Dokument übernommen werden sollen. Das klappt auch, nur fehlt dann anschließend die Funktion für Textbausteine, die ja in dem nicht ausgeführten Code enthalten ist.

Re: Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 16:04
von komma4
evac hat geschrieben: Aus Sicherheitsgründen ist dieses Makro nicht ausführbar


Vielleicht noch ein paar Daten
OpenOffice-Version 2.2.0
Lotus Notes Version 7.0.1

Ich öffne die Vorlage aus Notes heraus, da hier erstmal Daten gesammelt
Offensichtlich das Problem des Aufrufs: hier musst Du OOo die Ausführung von Makros erlauben.
Deshalb die Frage: wie findet der Aufruf statt?
Reicht vielleicht auch das Einstellen der Makrosicherheit, Stichwort "Vertrauenswürdige Quellen"?

Re: Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 16:45
von evac
Der Aufruf erfolgt in Notes mit folgender LotusScript-Zeile:

Set objDoc = objDskTop.loadComponentFromUrl(docUrl, "_blank", 0, args)

docUrl enthält dann sowas wie -file:///i:/OO Textvorlage/blankoBrief.ott-

Ich habe diesen Pfad (also bis OO Textvorlage) auch schnonmal zu den Vertrauenswürdigen Quellen hinzugefügt und die Sicherheitsstufe auf -Sehr hoch- gesetzt. Hat auch nicht geholfen.

Aber wie gesagt, kann diese Vorlage -blankoBrief.ott- ja auch im Datei-Explorer doppelgeklickt werden.
Dann funktioniert das mit dem Code in der Vorlage seltsamerweise.

Re: Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 17:03
von komma4
Also, wenn aus dem Explorer ausgeführt wird, sollte Deine Quelle als vertrauenswürdig eingestuft werden.


Für einen Aufruf aus dem Skript (sieht wie VBA aus, eehh?) gebe dem Code die Makroerlaubnis mit

Code: Alles auswählen

Dim oOpenProperties(0) as new com.sun.star.beans.PropertyValue
' open options:
' 0: execute macros with no warning message
oOpenProperties( 0 ).Name = _
 "MacroExecutionMode"
oOpenProperties( 0 ).Value = _
 com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN ' value 4
Set objDoc = objDskTop.loadComponentFromUrl(docUrl, "_blank", 0, oOpenProperties() )
(Achtung: Zeilenumbruch)

Klappt es damit?

Re: Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 17:46
von evac
Na das werde ich doch mal morgen ausprobieren!

Allerdings wäre das ja ein netter Parameter. Kann man einfach so den Hinweis von wegen Makros enthalten umgehen und Makros auf alle Fälle ausführen?
Also wenn das hinhaut, wäre ich ja schon einigermaßen überrascht.

LotusScript und VBA haben in der Tat ne Menge Ähnlichkeiten.
Das macht es dann ganz bequem, wenn man zwischen beiden wechseln muss.

Re: Makroausführung OLE Automation

Verfasst: Do, 04.10.2007 19:39
von komma4
Wie könnte eine Automatisierung funktionieren, wenn es einen solchen Schalter nicht gäbe?

Fundstelle: DevelopersGuide und Mögliche Schalter-Werte

Re: Makroausführung OLE Automation

Verfasst: Fr, 05.10.2007 13:23
von evac
Ok, ich verneige mich vorläufig :)

Denn es muss noch auf einem in Hannover gehosteten System laufen. Aber dann kommt die endgültige Verneigung.
Hab allerdings gleich Value -4- genommen und nicht die ausgeschriebene Version. Mir ist so, als hätte ich das schonmal versucht und es ging nicht.

Was meine Verwunderung wegen dieser no_warn Geschichte betrifft:
Ich habe tatsächlich erwartet, dass das für alle Makros, auch solche, die nicht signed sind oder aus vertrauenswürdigen Quellen kommen, funktioniert.

Den gehosteten Test mache ich am Montag und bin da guter Dinge.

Re: Makroausführung OLE Automation

Verfasst: Do, 31.07.2008 12:43
von MoC08
Hallo,

habe das selbe Problem, nur habe ich es mit dem oben angegebenen Code nicht hingekriegt....
Es könnte natürlich an meiner Übersetzung in Lotus Script liegen

hat jemand das Problem schon gelöst???

MFG

MoC08

Re: Makroausführung OLE Automation

Verfasst: Mo, 04.08.2008 09:37
von MoC08
hier mein Code (bringt immer die Fehlermeldung Subscript out of range)

Code: Alles auswählen

	Dim SM As Variant
	Dim Desktop As Variant
	Dim oOpenProperties()
	Set SM=CreateObject("com.sun.star.ServiceManager")
	Set Desktop=SM.createInstance("com.sun.star.frame.Desktop")
	
'0: execute macros with no warning message
	oOpenProperties(0).Name = "MacroExecutionMode"
	oOpenProperties(0).Value = "com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN" ' value 4
	

	Dim objDocument As Variant
	Set objDocument=Desktop.loadComponentFromURL("file:///c:/BriefVorlage01.ott","_blank",0,oOpenProperties())

Re: Makroausführung OLE Automation

Verfasst: Fr, 12.09.2008 16:35
von turtle47
Das Problem hat mich auch schon mal beschäftigt und folgender Code hat nicht funktioniert

Code: Alles auswählen

   Dim mArgs(0) as New com.sun.star.beans.PropertyValue
	mArgs(0).Name = "MacroExecutionMode"
	mArgs(0).Value = "com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN"
	oDocument = StarDesktop.loadComponentFromURL(sUrl,"_blank",0, mArgs())
bis ich folgende Codezeilen verwendet habe:

Code: Alles auswählen

   Dim mArgs(0) as New com.sun.star.beans.PropertyValue
	mArgs(0).Name = "MacroExecutionMode"
	mArgs(0).Value = 4
	oDocument = StarDesktop.loadComponentFromURL(sUrl,"_blank",0, mArgs())
Makros in den per Makro geladenen Dokumenten lassen sich anstandslos ausführen.

Re: Makroausführung OLE Automation

Verfasst: Fr, 12.09.2008 18:18
von komma4
turtle47 hat geschrieben:... und folgender Code hat nicht funktioniert
Liegt das an den Anführungszeichen bei der .Value Zuweisung:

Code: Alles auswählen

Sub sayKonstante
print com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
print com.sun.star.document.MacroExecMode.USE_CONFIG_APPROVE_CONFIRMATION
End Sub
Mit "" wird ein string gesetzt....

Re: Makroausführung OLE Automation

Verfasst: Mo, 15.09.2008 18:39
von komma4
MoC08 hat geschrieben:hier mein Code (bringt immer die Fehlermeldung Subscript out of range)

Code: Alles auswählen

	Dim SM As Variant
	Dim Desktop As Variant
	Dim oOpenProperties()
... kann es sein, dass Deine Meldung am fehlenden (fehlerhaften!) Datentyp liegt??!

Deine oOpenProperties ist ein variant, Du brauchst aber ein

Code: Alles auswählen

as New com.sun.star.beans.PropertyValue
.
Sagt ja auch die Fehlermeldung: kein Typ.

Klappt es damit?
Haste mal bei DannyB geschaut, der hat doch Delphi-Beispiele...?