OOobbs/104
質問
VBAからOpenOffice.org Basicに移植しようと苦心してます。 OpenOffice.org 2.0.3です 初歩的な質問かもしれませんが、どなたか教えてください。 aaa.odsのシートにフォームコントロールのボタンを配置し、bbb.odsドキュメントを開くマクロコードを割り当てています。このコードはaaa.odsドキュメントのライブラリに書いています。 bbb.odsドキュメントにもシート上にフォームコントロールのボタンを配置しbbb.odsドキュメントを操作するマクロコードを割り当てています。そのコードはbbb.odsのライブラリに書いています。 aaa.odsドキュメントのボタンを操作してbbb.odsドキュメントを開き、bbb.odsのシート上のボタンに割り当ててあるマクロを動作させようとしましたが、まったく動作しません。 bbb.odsドキュメントを単独で開くとマクロは動作します。 なぜでしょうか?マクロが悪いのか別の理由かよくわかりません。どうすればよいのでしょうか... ちなみにaaa.odsに書いているbbb.odsを開くマクロは下記のようなものです。 Sub bbb_open Dim oDoc,oDoc1 As Object Dim sUrl As String Dim mArg() as String oDoc=StarDesktop.CurrentComponent sUrl="file:///D:/bbb.ods" oDoc1 = StarDesktop.loadComponentFromURL(sUrl, "_blank", 0, mArg()) 'bbb.odsを開く oDoc.close(true) 'aaa.odsを閉じる End Sub 回答
マクロのセキュリティーに関しては,ツールメニューのオプション設定から,セキュリティに設定があります。しかし,これを変更すると全てのマクロに関して設定が変更されてしまいます。 aaa.ods のコードを変更してマクロのセキュリティに対応させます。 以下のようにコードを変更しました。'<- が入っている行が変更,追加した部分です。 Sub bbb_open Dim oDoc,oDoc1 As Object Dim sUrl As String Dim mArg(0) As New com.sun.star.beans.PropertyValue '<- oDoc=StarDesktop.CurrentComponent sUrl="file:///C:/usr/bbb.ods" mArg(0).Name = "MacroExecutionMode" '<- mArg(0).Value = com.sun.star.document.MacroExecMode.USE_CONFIG '<- oDoc1 = StarDesktop.loadComponentFromURL(sUrl, "_blank", 0, mArg()) 'bbb.odsを開く oDoc.close(true) 'aaa.odsを閉じる End Sub loadComponentFromUrl メソッドでは,最後の変数にドキュメントを読み込む際のオプションを設定することが出来ます。そのオプションを利用して bbb.ods を開いた際のマクロの実行に関する取り扱いを与えました。loadComponentFromUrl に関しては idl リファレンスの com.sun.star.frame.XComponentLoader オプションの MacroExecutionMode でファイル中のマクロの実行モードを設定します。このオプションは com.sun.star.document.MacroExecMode 私の環境では,マクロを含むファイルを開いた際にダイアログを表示して,マクロを有効にするかどうかを選択するように設定してあります。上記のマクロを実行すると bbb.ods のファイルを aaa.ods から開いた際にもマクロを有効にするかどうかのダイアログが表示されるようになりました。変更前の aaa.ods ではダイアログは表示されませんでした。 ファイルを開く際のオプションに関してですが,これは com.sun.star.document.MediaDescriptor
|