OpenOffice/LibreOffice Basicマクロの使い方をサンプルを交えてご紹介します。

LibreOfficeマクロの作り方

OpenOffice.org Basic は、OpenOffice.orgを制御するためのスクリプト言語です。VBAでMicrosoft Officeを制御できるように、OpenOffice.org Basic で OpenOffice.org を制御することができます。OpenOffice.org Basic の文法はVisual Basicとほぼ同じなので、文法についてはVisual Basicの項を参照してください。

OpenOffice.org Basicを編集するには、[ツール] メニューから [マクロ] - [マクロの管理] - [OpenOffice.org Basic] を選択してクリックします。

メニュー操作

LibreOfficeマクロとVBAの違い

OpenOffice.org Basicは、基本的に文法がVBA (Visual Basic for Applications)と同じである。しかし、いくつか相違点もある。以下に OpenOffice.org BasicとVBAの違いを説明する。

ステートメントは大文字と小文字を区別しない

Visual Basicのエディタでは入力されたステートメントがキャピタライズされて、1文字目が大文字、2文字目以降が小文字に整形されます。たとえば、 dim i as integer と入力すると、 Dim i As Integer と整形されます。

OpenOffice.org Basicのエディタではこのような整形は行われません。OpenOffice.org Basicではステートメントの大文字と小文字は区別されないので、大文字で入力しても小文字で入力しても構いません。たとえば、次の文はすべて同じ意味に解釈されます。

プロシージャ引数の参照渡し・値渡しの指定方法の違い

プロシージャへ引数として変数を渡すときの参照渡し・値渡しの指定方法がOpenOffice.org BasicとVisual Basicとで異なります。

呼び出し側からプロシージャへ変数を引数として渡した場合、プロシージャ内で引数の値を変更すると、呼び出し側の変数の値も変わります。これを 参照渡し と呼びます。

呼び出し側からプロシージャへ変数を引数として渡すとき、呼び出し側の変数の値を変更されたくない場合、渡す変数名の前に ByRef 修飾子を付けます。こうすることで、プロシージャ内で引数の値を変更しても、呼び出し側の変数の値が変わることがなくなります。これを 値渡し と呼びます。

Sub Caller
  Dim var1 As Integer
  Dim var2 As Integer

  var1 = 1
  var2 = 1

  Proc(var1, ByRef var2)
  'var1の値は2になる
  'var2の値は1のまま
End Sub

Sub Proc(para1 As Integer, para2 As Integer)
  'para1およびpara2の値は1
  para1 = 2
  para2 = 2
End Sub

実行時エラーに関する情報

Visual Basicでは、実行時エラーが発生した際にErrオブジェクトに実行時エラーに関する情報が格納される。しかし、OpenOffice.org BasicにはErrオブジェクトは存在しない。Errオブジェクトの代わりに、次の変数を参照することができる。

変数名 意味
Err エラー番号
Error$ エラーの内容
Erl エラーが発生した行番号

実行時エラーが発生した際に、その内容をメッセージボックスで表示するOpenOffice.org Basicコードの例を示す。

Sub ErrorSample
  Dim i As Integer

  On Error Goto ErrorHandler
  i = 0
  i = 12 / i
  Exit Sub

ErrorHandler:
  MsgBox Error$
End Sub

オブジェクトやメソッド、プロパティ名の違い

GUI部品を表すコントロール・オブジェクトや、アプリケーションのドキュメントにアクセスするためのオブジェクトやメソッド、プロパティがOpenOffice.org BasicとVBAでまったく異なります。

LibreOffice APIリファレンス

com.sun.star.awt.*
com.sun.star.chart.chartAxis
com.sun.star.comp.chart.ChartLine
com.sun.star.comp.chart.DataSeries
com.sun.star.comp.chart.Diagram
com.sun.star.comp.chart.Legend
com.sun.star.comp.chart.Title
com.sun.star.comp.chart2.ChartModel
com.sun.star.drawing.LineDash
com.sun.star.table.CellRangeAddress
ScCellObj
ScCellRangeObj
ScChartsObj
ScTableSheetObj
ScTableSheetsObj
stardiv.Toolkit.UnoCheckBoxControl
stardiv.Toolkit.UnoDateFieldControl
stardiv.Toolkit.UnoDialogControl
stardiv.Toolkit.UnoListBoxControl
stardiv.Toolkit.UnoNumericFieldControl
stardiv.Toolkit.UnoRadioButtonControl
ThisComponent
このエントリーをはてなブックマークに追加