Libreoffice Calc マクロ"Basic言語" 基礎の基礎 メモ3
初めに
前提条件はLibreoffice Calc マクロ"Basic言語" 基礎の基礎 メモ1を参照ください。
今回はCalc独自機能です。Option VBASupportとUnoサービスについてメモ。
Option VBASupportについて
Option VBASupport 1
Sub Main
MsgBox ThisWorkbook.Name
End Sub
最初の行「Option VBASupport 1」でExcel VBAの書式が有効になります。「Option VBASupport 1」を指定すると、Calc Basic に追加で、Excel VBA(互換機能)が使えるようになるという仕組みになります。
上記プログラムでは「Option VBASupport 1」を消すとVBA書式である「ThisWorkbook.Name」でエラーになります。
互換機能なので完全に動作が一致するものではないです。Excelと文書を交換するとか、ExcelのVBA書式が好きならば「Option VBASupport 1」とするとよいと思います。Excelでも使う場合はCalcでなくExcelでVBAを書いて変換すると間違いが少ないと思います。
マクロの記録によるUnoサービス呼び出し
マクロ記録を有効にするには、メニューより「オプション」でツリーから「Libreoffice」-「詳細」を選んで「マクロの記録を有効にする」をOnにします。
メニューより「ツール」-「マクロ」-「マクロの記録」を選択して記録を開始します
A1セルを1回だけクリックします。
メニューより「ツール」-「マクロ」-「マクロの記録」を選択して記録を終了します。
BASICマクロ・ダイアログが開くので、マクロの保存先に「無題1」を選択し[保存]ボタンをクリックします。
保存モジュール名を指定して[OK]ボタンをクリックします。
Module1にマクロが記録されます。
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub
プログラムはA1を選択するBasicのプログラムです。実行するとA1Cellに移動します。
createUnoService()「Uno」サービスで、CやJavaなどからも呼び出すことが出来るように作られているようです。
マクロの記録は便利で、メニュー操作…例えば検索操作も記録可能です。必要に応じて引数をプログラムで変更すれば、複雑な処理が可能かと思います。
Unoサービス
executeDispatch()で実行。第一引数にはドキュメント、第二引数に実行するコマンド(「.Uno:」で始まる)、第五引数にコマンドの引数
第五引数には「com.sun.star.beans.PropertyValue」配列でUnoコマンドに与える引数。第二引数のコマンドによって配列の要素数は変わります。
最後に
今回はCalc Basicの独自の機能でした。executeDispatch()はExcel VBAでは使えませんがCalcを前提とするなら便利に使える思います。
Libreoffice Basic独自の機能は「LibreOffice Calc Basic」等で検索しても出てこないことが多いです。「StarOffice」「OpenOffice」でも検索すると良いようです。
その4に続く