*外部からマクロを起動する [#p6cee404] マクロやそのほかから別のファイルを開いた時には MacroExecutionMode を正しく設定しておかなければ、そのドキュメント内のマクロを実行できません。[[OOobbs/104]]、[[MediaDescriptor>OOoBasic/Generic/MediaDescriptor#xaddb93f]] など参照。 #contents ** OOo起動時に、呼び出すマクロを指定する [#o61a3352] soffice.exe "test.stc" macro:///Standard.Module1.Main("") test.stcというテンプレートファイルを読み込んで、共有領域に保存されているマクロを呼び出すことになります。 **OOo起動時に、テンプレートファイルに保存されたマクロを指定する [#xa19901b] soffice.exe test.stc macro://./Standard.Module1.Main("") test.sxc ファイルの Standard.Module1.Main を実行するとうまくいきましたが, 同じファイルの作成しておいた test.test.Main を呼び出そうとしてもうまくい きませんでした。 どうやらライブラリが読み込まれていないようです~ (Standard ライブラリはファイルの読み込み時に必ず読み込まれる)。 ** OLE 経由でドキュメント内のマクロを実行 [#tf31c546] VB Script などからドキュメント内のマクロをドキュメントのスクリプトプロバイダから実行しようとすると、スクリプトプロバイダから getScript メソッドが呼べません。 "オブジェクトでサポートされていないプロパティまたはメソッドです。" となります。 dispatch で実行する方法もあります。バージョン 3.x ではドキュメントが Hidden 状態でも問題ありません。 こうすると、エラー。 Set mcf= WScript.CreateObject("com.sun.star.ServiceManager") Set desktop= mcf.createInstance("com.sun.star.frame.Desktop") Dim args(1) For i = 0 To UBound(args) Set args(i) = mcf.Bridge_GetStruct("com.sun.star.beans.PropertyValue") Next args(0).Name = "Hidden" args(0).Value = False args(1).Name = "MacroExecutionMode" args(1).Value = 4 Set scriptURI = "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document" Set doc = desktop.loadComponentFromURL("file:///E:/usr/doc.odt", "_blank", 0, args) Set scriptProvider = doc.getScriptProvider() ' ここでエラー Set s = scriptProvider.getScript(scriptURI) Call s.invoke(array(), array(), array()) css.beans.Introspection を経由してやると実行できます。 Set introspection = mcf.createInstance("com.sun.star.beans.Introspection") Set inspected = introspection.inspect(scriptProvider) Set m = inspected.getMethod("getScript", -1) Set s = m.invoke(scriptProvider, array(scriptURI )) Call s.invoke(array(), array(), array()) |