Top > OOobbs > 104

OOobbs/104 Edit

  • サマリ: ドキュメントのマクロから別のドキュメントを開いたとき、マクロが動作しない
  • 環境: Calc
  • 状態: 解決
  • 投稿者: AMERI?
  • 投稿日: 2006-07-25 (火) 16:43:10

質問 Edit

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

回答 Edit

  • 上記のコードで bbb.ods ドキュメントを開くと,マクロのセキュリティの問題で bbb.ods ドキュメント中のマクロが実行できなくなっています。

マクロのセキュリティーに関しては,ツールメニューのオプション設定から,セキュリティに設定があります。しかし,これを変更すると全てのマクロに関して設定が変更されてしまいます。

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 の定数で指定します。USE_CONFIG では,マクロの実行に関するセキュリティ設定を使用します。(メニューから設定されているもの)環境に応じてモードに与える定数を変更してください。ALWAYS_EXECUTE_NO_WARN といった警告なしで実行できるものもあります。

私の環境では,マクロを含むファイルを開いた際にダイアログを表示して,マクロを有効にするかどうかを選択するように設定してあります。上記のマクロを実行すると bbb.ods のファイルを aaa.ods から開いた際にもマクロを有効にするかどうかのダイアログが表示されるようになりました。変更前の aaa.ods ではダイアログは表示されませんでした。

ファイルを開く際のオプションに関してですが,これは com.sun.star.document.MediaDescriptor サービスのプロパティ値を使って設定します。たとえば,ファイルを読み込み専用で開いたり,実際に画面に表示せずに裏で開いたりといった使い方もできます。OOobbs/86 などで使用されています。

  • はにゃ?? 2006-07-29 (土) 03:07:39
  • ありがとうございました。マクロが実行できました。これで一歩前進です。 -- AMERI? 2006-08-01 (火) 12:24:58


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes