OpenOffice.org Calcのセル内で,HYPERLINK関数だけでマクロを実行する方法 (表計算シート上にボタン塔を設置せずに,OpenOffice Basicを簡単に実行する)
OOo Calcで,セル内のHYPERLINK関数だけでマクロを実行できる。
下記のように記述すればよい。
=HYPERLINK("vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document";"クリックしてね")
これだけで,Module1のMain関数が呼び出される。
ボタンなどのフォームコントロールを設置せずにマクロを実行できるので便利だ。
引数を渡すこともできる
セルから関数に引数を渡すこともできる。
例えば,マクロ側で次のように,Mainに引数を定義すると・・・
Sub Main(s) msgbox s End Sub
セルをクリックしたときには,下記のようなメッセージが表示される。
vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document
つまり,セル内のリンク文字列が,そのままMainの引数に渡っているのだ。
ということは,セルの位置に応じてマクロの処理を変えられる!!
ここで渡っている引数に,セルのアドレスを渡せば,
クリックされたセルの位置に応じて
マクロ側で処理を分岐させることもできる。
セル側で,下記のようにHYPERLINKを記述したとすると・・・
=HYPERLINK("vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document¶m="&ADDRESS(ROW();COLUMN());"hoge")
セル側のアドレスが C13 の場合,
セルをクリックして表示されるメッセージは
vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document¶m=$C$13
となる。
&のあとのパラメータ名は自由に決められる。
たとえば,セルの列番号を渡すには
列番号だけを渡したいのであれば,セル側では
=HYPERLINK("vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document&COL="&COLUMN();"hoge")
として,
マクロ側で下記のようにする。
Sub Main(s) ' セルから渡されるパラメータの識別子 Const token ="&col=" ' パラメータ文字列中で,値がある場所の位置 pos = instr(s, token) + len(token) ' 値の部分だけを文字列として切り出し arg_val = mid( s, pos ) ' 文字列から数値に変換 msgbox val(arg_val) End Sub
この場合,セルが存在する列番号が表示される。
参考資料:
OpenOffice.org Forum :: Hyperlink to execute macro
http://www.oooforum.org/forum/viewtop...
- =IF(A1;HYPERLINK("vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document& param="&ADDRESS(ROW();COLUMN()); "Push Me")&T(STYLE("buttonActive"));"Disabled"&T(STYLE("buttonDisabled")))
[Solved] Calc basic macro to add a button to a cell (View topic) • Apache OpenOffice Community Forum
https://forum.openoffice.org/en/forum...
- =HYPERLINK("vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document")
OOoBasic/Writer/HyperLink - ...?
http://hermione.s41.xrea.com/pukiwiki...
- マクロなどを実行するときには vnd.sun.star.script:... 形式で指定します。
注意点
ただし,このテクニックは,
LibreOfficeの特定のバージョンではバグで動かない場合がある。
その場合は,ハイパーリンクではなく
ボタンを使ってマクロを実行するとよい。
Libreoffice Calc run macro with HYPERLINK - Stack Overflow
http://stackoverflow.com/questions/25...
- This seems to be a bug in Calc. The protocol vnd.sun.star.script runs in hyperlink URLs in Writer still in version 4.2. But in Calc it runs not.
Hyperlink stopped working after upgrade - Ask LibreOffice
http://ask.libreoffice.org/en/questio...
- I upgraded Ubuntu 13.04 to 13.10 and Libreoffice version is now 4.1.2.3. My problem is that now HYPERLINK function doesn't work anymore in my CALC sheet