Top > OOobbs > 19

OOobbs/19

  • サマリ: ドキュメントDoc_AからドキュメントDoc_BのBasicLibraryを実行させる方法
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: suou?
  • 投稿日: 2004-06-04 (金) 11:49:48

質問

BasicライブラリDoc_A_mytoolsがDoc_Aにあるとき、Doc_Bに属するモジュールにGlobalscope.BasicLibraries.LoadLibrary("Doc_A_mytools")のような宣言を書いても、OOoは認識してくれません。 また、OpenOffice.orgプログラム本体のsofficeに属するモジュールからDoc_Aのライブラリを認識させることもできません。

Globalscope.BasicLibraries.LoadLibrary("Doc_A_mytools")のような宣言はOpenOffice.orgプログラム本体のsofficeに属するライブラリしか認識しないのでしょうか。

私は、ときどき使用するパソコンを変えるので、できればcalcファイルをコピーするだけで作業を継続できるようにしたいのです。

「マクロの管理」ダイアログから「新しいライブラリ」をDoc_A_mytoolとして作成し、そこにドラッグ&ドロップでモジュールを移動すると、c:\Program Files\Openoffice.org1.1.1\use\basic\Doc_A_mytoolにOpenoffice.org1.1.1設定ファイルとしてモジュールができます。しかし、別のパソコンにc:\Program Files\Openoffice.org1.1.1\use\basic\Doc_A_mytoolを作成し、これらのOpenoffice.org1.1.1設定ファイルをコピーしてもOpenoffice.orgは認識してくれませんので、他のパソコンに設定ファイルをコピーする方法も取れません。

したがって、やはり、他のCalcドキュメントのマクロを認識できる方法を教えて頂ければ大変有難いです。

回答

  1. 別ファイルのマクロの認識 ...
  2. 「マクロの管理」 ...

の二つについて書きます。

まず,「別ファイルのマクロの認識」についてです。が,先に下のほうの「マクロの管理」の部分を読んでもらえるといいかもしれません。

OpenOffice.org Basic のヘルプにもあるとおり,Globalscope はアプリケーションのライブラリを示すキーワードですが,このキーワードを使うとアプリケーションのライブラリのみを指すようです。なので,他のファイル (他のドキュメント) の Basic ライブラリ (マクロ) を示すことができません。

そこで,他のドキュメントの LoadLibrary を行う方法です。

読み込みたいマクロのライブラリがあるドキュメントを Doc_B とします。このドキュメントオブジェクトを変数 oDoc_B に取得します (うまくやれば簡単にできます)。

ここからは,oDoc_B がドキュメント B のドキュメントオブジェクトとして,進めます。

この oDoc_B は BasicLibraries プロパティーを持ちます。(OOoBasic/Calc/obj/ThisComponent#p? などを参照) そこで,このプロパティーを使ってそのドキュメントのライブラリにアクセスすることができます。なお,この BasciLibrary プロパティーは 1.1_644 ごろのバージョンから利用することができるようになりました (1.0 系では利用できない)。

Dim oBasicLib_B As Object
oBasicLib_B = oDoc_B.BasicLibraries

としたとき,この oBasicLib_B はライブラリを操作するためのさまざまなメソッドを持ちます。OOoBasic/Generic/obj/BasicLibraries? を参照。

たとえば,ライブラリ "Standard" を読み込むには,次のようにします。

If oBasicLib_B.hasByName( "Standard" ) Then
  oBasicLib_B.loadLibrary( "Standard" )
End If

読み込めたけど,Sub routine を呼び出すことができない?

つぎに,「マクロの管理」についてです。

まず,マクロを入れたファイルを作成します。これは,ただのドキュメントファイルです。Writer でも Calc のドキュメントでもいいです。

つぎに,マクロの管理ダイアログから,「追加」を選択してライブラリを追加します。

追加する際に,先ほど始めに作成しておいたマクロを入れたファイルを指定します。すると,そのファイルにあるライブラリが表示されるので,追加したいライブラリを指定します。

すると,ライブラリが追加されます。

このとき,不便なことに同じ名前のライブラリが存在するときには,ライブラリの置換を行うことができません。

これを改善するには,モジュールごとにライブラリを移動するほうほうがあります。OOoBasic/Macros/LibInstaller ではこの方法を使って,同じライブラリのなかのモジュールのみを追加したりすることができるようにしてあります。

  • はにゃ?? 2004-06-04 (金) 23:59:16
  • 懇切丁寧なご説明ありがとうございました。「マクロを入れたファイルを作成」するつもりで、VBAのbasファイルに相当するものと勘違いしてtxtファイルを作成し、ここにOOoBasicのSubをコピーしてセイブしたところ、管理ダイアログから認識されませんでした。「マクロを入れたファイル」とは例えばCalcの場合であれば、からっぽの表でいいけれども、マクロだけは入っているCalcドキュメントのことと分かりその後は旨くいきました。「管理ダイアログ」の「追加」は「マクロの入ったドキュメント」からそのModuleとDialogをコピーすることのようですね。すると、普段はDoc_Aのライブラリでマクロを実行・編集し、必要なときだけDoc_Bに管理ダイアログの「追加」を使ってModuleとDailogをコピーしておけばよいことになります。マクロのメンテナンスはこの方法で行けそうです。しかし、この方法だとoBasicLib_B.loadlibarary("Standard")は必要なくなってしまうような気がします。まだ、私の理解が足りてない気がします。 -- suou? 2004-06-05 (土) 09:26:20
  • Enter を押すと,送信されてしまいます。それに,複数行が書き込みにくいです。そこで,まず名前とすこしだけ書き込んでから,コメントを挿入してしまい,段落ごとにある見出しの右側にある [edit] をクリックして編集画面で編集してもらえればいいと思います。私の場合はいつもそうしています。 -- はにゃ?? 2004-06-06 (日) 01:18:26
  • Enterキーを誤って押して書込途中で送信された部分を「編」集機能で訂正しました。ありがとうございました。最初、このページ最下部の「新編凍差・・・」は言葉としては意味が分からず何かの文字化けかなと思っていました。コマンドへのリンクだったのですね。[]か何かでそれぞれの文字をくくるともう少し分かりやすいかも知れません。 -- suou? 2004-06-06 (日) 08:56:55
  • PukiWiki の改造していないものでは文字が当てはめられていたり,画像のアイコンが設定されているのですが。それだとそのファイルへのアクセスばかり増えてしまっていたので,すこし変更しました。マウスカーソルを持っていくとツールチップが表示されるのですが,うーんどうしよう -- はにゃ?? 2004-06-06 (日) 10:03:43
  • oBasicLib_B.loadlibarary("Standard") がいるかどうか,についてですが。同じファイルのマクロのライブラリを読み込むのなら,BasicLibraries.LoadLibrary("xxxx...") の形式で読み込めばいいと思います。また,余談ですが,"Standard" ライブラリはアプリケーションを起動したときやドキュメントを開いたときに勝手に読み込まれる仕様になっているらしいです。でも,明示的に読み込ませるべきだと思います。 -- はにゃ?? 2004-06-06 (日) 10:07:30


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