OOobbs/5
質問はじめまして。Excel97+MS Visual Basic ver5(←古い)から、できるなら OpenOfficeへ乗り換えようとしている者です。このサイトにて、シートの選択、 セルの選択も含め、かなりのことが分かりました。しかし、Windowの選択が良く 分かりません。 例えば aaaa.sxc からマクロを起動し、data1.sxc という外部データを LoadComponentFromUrl にて開くと、フォーカスが data1.sxc に移ります(これは、 CurrentComponent が data1.sxc に移るとでも言うべきなのでしょうか)。 その後、フォーカスを aaaa.sxc に戻すには、どうすればよいのでしょうか。 aaaa.sxc のウインドウが選択状態になればいいのです。ちなみに、Visual Basic では、 Windows("aaaa.xls").Activate の一文でこれを行うことが出来ます。これに相当するキーワードを知りたいのです。 よろしくご教授お願いします。 (環境 日本語 Win Me, CUP Intel Celeron 2000MHz) 回答例としてのマクロを実行するドキュメント aaaa.sxc のドキュメントオブジェクトを getCurrentComponent で取得して使用します。 まずは,次のようにして oDoc を aaaa.sxc のドキュメントオブジェクトとして取得しておきます (data.sxc を読み込む前に) 。そして,最後の三行でフレームを前面に持ってきます。一度取得した oDoc は aaaa.sxc のドキュメントオブジェクトのままになっています。 Sub test Dim oDoc As Object, oController As Object Dim oFrame As Object, oContainerWindow As Object Dim oDesktop As Object, oDataDoc As Object Dim mArg() oDesktop = CreateUnoService("com.sun.star.frame.Desktop") oDoc = oDesktop.CurrentComponent oController = oDoc.getCurrentController() oDataDoc = oDesktop.loadComponentFromUrl( _ "file:///C:/usr/local/test.sxc", "_blank", 0, mArg() ) oFrame = oController.getFrame() oContainerWindow = oFrame.getContainerWindow() oContainerWindow.toFront() End Sub 上のコードの最後の方はまだドキュメントを作成していないので説明がありませんが,順に作成することにします。 データ用のファイルを読み込むだけで見る必要がないのなら,隠した状態でドキュメントを開くといいかもしれません。 loadComponentFromUrl メソッドの mArg() 引数に Hidden プロパティーを指定します。 Dim mArg(0) As New com.sun.star.beans.PropertyValue mArg(0).Name = "Hidden" mArg(0).Value = false 代わりにこれを使用するとファイルを読み込んでもウィンドウが表示されません。使用した後はファイルを閉じないと開きっぱなしになってしまいますが。 開いたファイルを閉じるには close メソッドを使用するといいです。上のコードのものなら, oDataDoc.close(true) とするとドキュメントを閉じます。 -- はにゃ?? 2004-01-23 (金) 03:01:03 aaaa.sxc からマクロを起動の部分ですが,マクロの ThisComponent または CurrentController によってドキュメントオブジェクトが違ってきますので気をつけてください。これはマクロ本体がファイル中またはアプリケーションライブラリのどちらにあるかで挙動が変わってきます。 oDesktop からすべての OOo のフレームにアクセスすることができます。これについては ...
ということで,続きですが, Sub test_2 Dim oDesktop As Object Dim oFrames As Object oDesktop = createUnoService("com.sun.star.frame.Desktop") oFrames = oDesktop.getFrames() For i = 0 To aFrames.getCount() -1 MsgBox aFrames.getByIndex(i).getController().getModel().getURL() Next i End Sub を実行すると今の OOo のすべての開いているフレームのドキュメントの Url を順に表示します。ここで aFrames.getByIndex(i).getController().getModel() で取得することができるオブジェクトはファイルそれぞれのドキュメントオブジェクトと同じものです (上のほうのコードで言うところの oDoc 変数にしまわれているオブジェクト)。 開いているファイルをどのようにして使用するのか分かりませんが,上のようにすることでアクセスすることができます。aFrames, aFrames.getByIndex(i), ....getController(), ....getModel() で取得することができるのはすべてオブジェクトなので, DbgInfo2sheet などで調べてみるのもいいかもしれません。 Calc でなら, aFrames.getByIndex(i).getController() → Calc CurrentController? aFrames.getByIndex(i).getController().getModel() → Calc ThisComponent? などとなります。 利用するファイルを手動ではなくて loadComponentFromUrl メソッドで開くようにするなら,それぞれのファイルをそれぞれ変数に割り当てたほうが簡単でいいと思いますが,コードの汎用性がなくなりますね。 -- はにゃ?? 2004-01-23 (金) 22:56:05 For 文の中を MsgBox aFrames.getByIndex(i).Title にするとタイトルバーに表示されている文字列が表示されます。
|