OOo 3.0からは、Excel VBAによるマクロを直接実行できるモードが追加される。OOoのマクロ環境には、VBAと似たコマンド体系のBasicが備わっているものの完全な互換性はない。したがって、ExcelのVBAを利用した過去のマクロ遺産をCalcに移行するには、OOo Basicに移植するという作業が必要だった。しかし、Excel VBAがサポートされたことによって、この「移植」という手間のかかる作業がある程度軽減される可能性が出てきた。

OOo 3.0のCalcでExcel VBAを実行するためには、まずOOoのオプションを変更しておく必要がある。図14のオプション画面で[読み込みと保存]-[VBA属性]を選び、「Microsoft Excel 97/2000」欄の「実行可能コード」にチェックを入れる。

図14 OOoのツールメニューのオプションを選ぶとオプション画面になる

図15 「Next >」ボタンをクリックするとParametersの数値が変わる

ここでは、サンプルとして公開されている、ExcelのVBAを利用したマクロプログラム「hypocycloid-demo.xls」をOOo 3.0で読み込んでみた。このサンプルは、ハイポサイクロイドという数値によってCGを描くプログラムをExcel VBAで実現したものだ。図15の[Next >]ボタンをクリックすると、Parametersの値が変わるのが分かる。

このVBAによるマクロをCalcで読み込むと、図16のようにVBAコードの前に「Option VBAsupport 1」というコードが挿入される。Excel VBAのサポートは、VBAコマンドを解釈するライブラリーを読み込むことで実現している。そのオプションが「VBASupport 1」というコードになるわけだ。まだライブラリーは完全ではないので、ExcelのVBAマクロがすべて実行できるわけではない。したがって、このExcel VBAサポートで、「移植」が不要になったわけではない点には注意しよう。

図16 VBAコードの前に「Option VBAsupport 1」というコードが挿入される

図17 OOo 2.4.1でもExcel VBAが動作する

なお、このExcel VBAサポートをチェックしたのは、3.0ベータ2と3.0RC1だ。上記サンプルで本来ならグラフィック部分も変化するはずだが、そうならない。

実はExcel VBAサポートは、2.4.1でも取り込まれており、こちらはサンプルのマクロが完全に実行できている。2.4.1で実行した図17では[Next >]ボタンをクリックすることで、グラフィック部分も変更されているのが分かる(注6)。

注6: グラフィック部分も変更されているのが分かる
3.0でも、Excelで実行した時と同じ動作(グラフィック部分が変化する)にする方法が見つかった。グラフィック部分を選択し、「グラフの種類」ダイアログボックスを表示したら、[キャンセル]ボタンでダイアログを閉じる。この操作を1度行うとCalcでもサンプルのマクロが完全に実行できる。実は図17は、気付かずにこの“おまじない”のような操作を行った結果だった。いずれにしても現在のVBAサポート機能の「不具合」かもしれないので、さらに調べ原因が判明すれば、OpenOffice.orgのIssueTrackerに報告したい。