文書全体を表すドキュメント・オブジェクトは次の構文で表されます。

ThisComponent
StarDesktop.CurrentComponent

ドキュメント・オブジェクトをObject型またはVariant型の変数に代入して使用することもできます。

Dim oDoc As Object

oDoc = ThisComponent

ThisComponentやStarDesktop.CurrentComponentは、そのときにアクティブなドキュメントを表します。したがって、マクロを実行したドキュメントに限りません。複数のOpenOffice.orgを起動している場合、一方でマクロを実行して、そのマクロ実行中にもう一方のOpenOffice.orgにウィンドウを切り替えると、そこがアクティブなドキュメントになってしまいます。意図せぬ動作を防ぐため、マクロの冒頭でドキュメント・オブジェクトをObject型またはVariant型の変数に代入して使用する方がよいでしょう。

マクロの実行速度を速くする

OpenOffice.org CalcをOpenOffice.org Basicを制御するのは、Microsoft ExcelをVBAで制御するのより実行速度がだいぶ遅いです。少しでもマクロの実行速度を上げるための手法を示します。

画面の更新を抑制する

マクロの実行過程の間にもCalcではセルの再表示が行われています。たとえば、マクロでひとつのセルに値を設定したら、そのセルの表示が即座に更新されます。また、そのセルを参照して値を決めているセルの表示も更新されます。マクロ実行中に数多くのセルが何度も再表示を行うことになるので、Calcの実行速度が遅くなります。

マクロ実行中に途中経過を見る必要がなければ、画面表示の更新を抑制することができます。画面表示の更新を抑制するには、addActionLockメソッドを使用する。

画面表示の更新を抑制してからさまざまな処理を行い、処理が終わったら画面表示の更新の抑制を解除すれば、その間の再表示が行われない分、実行速度が速くなります。

画面表示の更新の抑制を解除するには、removeActionLockメソッドを使用する。

画面表示の更新が抑制されているかどうかは、isActionLockedメソッドで知ることができる。