3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(OpenOffice Basic)Calcシートの選択

OpenOffice 3.2 のマクロを触る機会ができました。

OpenOffice は Basic のほかに、PythonJavaScript,Bean Shellも使えるようですが、OpenOffice Basic が一番情報があるので、それを使うことにしました。

しばらくは OpenOffice マクロの話となります。

とりあえず、Excel で作られたマクロ付きを OpenOffice Calc に変換する作業をすることに。。

SunというかOracle公式の OpenOfficeBasic マニュアルがあるのでそれを参考にしました。(正確にはStarOfficeのマニュアルですが)

下記サイトで見れませす。

StarSuite 8 Basic プログラミングガイド

StarSuite 7 Office Suite - Basic プログラマ向けガイド

VBAとの互換は、あまりないようです。

ここによると、先頭に下記宣言を付けるとVBA互換になるけど、やはり完璧じゃありません。(途中でクラッシュしたりします。)

Option VBAsupport 1

また、関数名に日本語使えないようです。(普通プログラマの観点からするとそんなことはしませんが、移植元のExcel VBAはどうも素人さんが作ったらしく日本語関数名使いまくりでした。)

まずは、Calcでのシートの選択方法です。基本 OpenOffice ではシートやセル等は全て Object 変数で表すようです。

Dim oSheet As Object

//インデックスで選択

oSheet = ThisComponent.Sheets(0)

//シート名で選択

oSheet = ThisComponent.getByName.Sheets.("aaa")

 

Dim Doc as object

Doc = StarDesktop.CurrentComponent

oSheet = Doc.Sheets.getByName("Sheet")

OpenOffice IDEから実行するときは、ThisComponentからしないとダメなようです。

また、アクティブなシートの取得はVBAだと ActiveSheet オブジェクトからできますが、OpenOffice だと下記のようにしないといけません。

oSheet = ThisComponent.CurrentController.ActiveSheet

参考:

AddinBox/VBAユーザーの為のOpenOffice.org 備忘録:ThisWorkbook, ActiveWorkbook, ブック名での参照 ThisComponent と StarDesktop.CurrentComponent の違いがまとめられてます。

OOoBasic/Generic/document