OOobbs/19
質問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ドキュメントのマクロを認識できる方法を教えて頂ければ大変有難いです。 回答
の二つについて書きます。 まず,「別ファイルのマクロの認識」についてです。が,先に下のほうの「マクロの管理」の部分を読んでもらえるといいかもしれません。 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 ではこの方法を使って,同じライブラリのなかのモジュールのみを追加したりすることができるようにしてあります。
|