Libreoffice Calc マクロ"Basic言語" 基礎の基礎 メモ3

初めに

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に続く

#Libreoffice #Calc #Basic

いいなと思ったら応援しよう!