実行しているファイルのパスを取得したいのですが、
stardesktop.currentcomponent.geturl が取得できません。
にあるように簡単に取得できるはずなのですが、できないようです。
win7 libreoffice 4.4
mac libreoffice 5.1
でも同様です。
コードは下記です。
Sub Main
msgbox(stardesktop.currentcomponent.geturl)
End Sub
実行しているファイルのパスを取得したいのですが、
stardesktop.currentcomponent.geturl が取得できません。
にあるように簡単に取得できるはずなのですが、できないようです。
win7 libreoffice 4.4
mac libreoffice 5.1
でも同様です。
コードは下記です。
Sub Main
msgbox(stardesktop.currentcomponent.geturl)
End Sub
base 限定ですが、thisdatabasedocument.geturl で取得可能でした。
自信なし。解決策ではなく原因推測で終わる回答になってしまってもいる。
以下、あまり役に立たないかもしれない実験。
’ 当方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/Documentation/DevGuide/Basic/Accessing_the_UNO_API
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.
補足すると「Basic IDEではstardesktop.currentcomponentはBasicIDEというコンポーネントを指してしまうけど、thiscomponentはBasic IDEが起動する前のコンポーネント(つまり文書を開いているアプリ自身)を指す」というのが、引用部の意味です。
ThisComponentという擬似変数に現在のコンポーネント(つまりファイル)の情報が含まれているので、
msgbox(ThisComponent.getURL())
で取得可能だと思います。と、よく見たらhimajin100000さんが最後に引用されてるところで紹介されてますね、この擬似変数。
参考URL: http://stackoverflow.com/questions/12434803/path-of-current-document-in-libreopenoffice
(マクロ周りはいろいろ仕様が変わっているのに、使える情報(特に日本語のが)が古いのが難点ですね……