質問する
0

stardesktop.currentcomponent.geturl が帰ってこない

質問日 2016-03-20 00:27:51 +0200

zanjibar のGravatar画像

updated 2016-10-05 03:26:55 +0200

nogajun のGravatar画像

実行しているファイルのパスを取得したいのですが、 stardesktop.currentcomponent.geturl が取得できません。

http://jehupc.exblog.jp/12946357/

にあるように簡単に取得できるはずなのですが、できないようです。 win7 libreoffice 4.4 mac libreoffice 5.1

でも同様です。

コードは下記です。

Sub Main
msgbox(stardesktop.currentcomponent.geturl)
End Sub
edit retag flag offensive close merge delete

3 Answer

0

回答日 2016-05-08 15:12:32 +0200

Naruhiko のGravatar画像

updated 2016-05-08 16:05:11 +0200

ThisComponentという擬似変数に現在のコンポーネント(つまりファイル)の情報が含まれているので、

msgbox(ThisComponent.getURL())

で取得可能だと思います。と、よく見たらhimajin100000さんが最後に引用されてるところで紹介されてますね、この擬似変数。

参考URL: http://stackoverflow.com/questions/12...

(マクロ周りはいろいろ仕様が変わっているのに、使える情報(特に日本語のが)が古いのが難点ですね……

edit flag offensive delete link もっと
0

回答日 2016-03-25 22:30:35 +0200

himajin100000 のGravatar画像

updated 2016-03-27 09:55:59 +0200

自信なし。解決策ではなく原因推測で終わる回答になってしまってもいる。

以下、あまり役に立たないかもしれない実験。

' 当方Windows 10 + LibreOffice 5.1.2 x64

Sub Main

Dim x

x = StarDesktop.CurrentComponent

MsgBox(x.GetURL())

End Sub

をF8でステップ実行。最後まで走る前にウォッチウィンドウ(でいいのかな?MS Office付属のVBA的にはそう呼ぶけど)にxを入力してEnter。ちなみに変数名は入力できるが、プロパティ名や式を入力しても意味が無い。で、xの型がcom.sun.star.comp.basic.BasicIDEになってしまっていることを確認。

少なくともBasic IDE上で実行したり、シート上にボタンコントロール等を配置してイベントを発動させても上記コード で空文字列になっていることから、同様の状況になっていると考えられる。(追記:この挙動はマクロ自体が文書に含まれているかMy Macrosに入っているかに依存しないようだ。下記URLの説明と合わせて正直よくわからんのだが。)

一方、BasicIDEではなく、例えば、Calc自体のメニューから、Tools->Macros->Organize Macros->LibreOffice Basicを選択して、表示されたダイアログの右上にあるRunボタンから実行した時には、(俺はodsファイルで実験していたのだが)そのodsファイルの位置が表示された。

役に立つかもしれない参考資料: https://wiki.openoffice.org/wiki/Docu...

As previously mentioned, ThisComponent is used from document Basic, but it is also possible to use it from application Basic. In an application wide Basic module, ThisComponent is identical to the current component that can also be accessed through StarDesktop.CurrentComponent. The only difference between the two is that if the BasicIDE is active, StarDesktop.CurrentComponent refers to the BasicIDE itself while ThisComponent always refers to the component that was active before the BasicIDE became the top window.

edit flag offensive delete link もっと

Comments

補足すると「Basic IDEではstardesktop.currentcomponentはBasicIDEというコンポーネントを指してしまうけど、thiscomponentはBasic IDEが起動する前のコンポーネント(つまり文書を開いているアプリ自身)を指す」というのが、引用部の意味です。

Naruhiko のGravatar画像Naruhiko ( 2016-05-08 16:11:32 +0200 )edit
0

回答日 2016-03-21 05:26:01 +0200

zanjibar のGravatar画像

base 限定ですが、thisdatabasedocument.geturl で取得可能でした。

edit flag offensive delete link もっと
ログイン/サインアップして回答する

質問ツール

2 followers

Stats

Asked: 2016-03-20 00:27:51 +0200

Seen: 166 times

Last updated: May 08 '16