LibreOfficeでVBAが動くようになりましたが、EXCELファイルをLibreOfficeで開いたりVBAのコードを貼り付けるだけではエラーになることがよくあります。
VBAをLibreOfficeで動かすのに、私がやっている方法を説明します。
※プログラムを実行したときの環境
OS:Windows VISTA Service Pack2
LibreOffice:バージョン: 4.3.1.2
今回使用するプログラムの説明
「書き込み」ボタンをクリックすると、決まった所(茶色の枠で囲まれている箇所)に入力された文字を最初の行に挿入し、(プログラムが実行された)時間を記録するVBAのプログラムです。
これをLibreOfficeで動かします。
<実行前>「書き込み」ボタンをクリック
↓
<実行後>
表の一番上に行が挿入され、
セルB2に入っていたコメントが最初の行に移動、その時間が記録されました。
EXCELをLibreOfficeで開いてVBAを実行してみた
※ここは説明だけなので、同じ操作をやってみる必要はありません。
方法は後で説明しますが、EXCELファイルをLibreOfficeで開き、マクロを有効にしてみました。
「書き込み」ボタンを押してみても動きません。
さらに、メニューバーからマクロを呼び出し実行してみました。
エラーが出て、プログラムが止まりました。
VBAをLibreOfficeで使えるように編集する
注意
この方法だとワークシートのデータが消えたり、プログラムが使えなくなることがあります。
ファイルをバックアップするか、元のEXCELファイルを残しておいてから試してください。
この方法でやると、上の図のようにワークシートには不自然に空の行が挿入されるので、
余分な行を消し最後にワークシートを復元します。
VBAプログラムの内容によっては、この方法で動かせない物があります。
VBAが入っているEXCELファイルをLibreOffceで保存
VBAが入っているEXCELファイルを右クリック→「プログラムから開く(H)」→LibreOffice Calc」を選択
↓
この警告が出た場合は、マクロ実行に関するセキュリティレベルを「中」または「低」に設定し、
マクロを実行する前に一旦ファイルを閉じて、再度開く必要があります。
メニューバー「ファイル(F)」→「名前を付けて保存(A)」をクリック
↓
このダイアログが出たら、一番上の「ODF表計算ドキュメント(.ods)」を選択
↓
ダイアログ下の「保存」ボタンをクリック
(保存されたODS形式でファイルが、開かれている状態になります)
VBAプログラムをLibreOfficeで動くよう編集する
※始めに、
プログラムの赤枠部分は、VBAのコードであることをコンピューターに認識させるため、自動的に挿入されます。
もし挿入されていない場合、正しく動かなかったり、プログラムが使えなくなることがあります。
メニューバー「ツール(T)」→「マクロ(M)」→「マクロを実行」をクリック
左側の「ライブラリ」からVBAのプログラムが入っているファイルの左側の+をクリック。ツリー表示させる。
↓
「VBAProject」の左側の+をクリック。
↓
EXCEL VBAの場合と同様に、プログラムが入っているモジュールを選択。
※これ以下のモジュールがどのように分類、ツリー表示されるかは変わる場合がありました。
↓
右側の「マクロ名」から実行したいプログラムを選択し、「実行」ボタンをクリック。
エラーが出ます。
ダイアログの「OK」ボタンをクリックします。
↓
エラーが出ていた箇所が選択された状態になります。
行がずれないように注意して、エラーが出た所をコメントアウトします。
次に「実行」ボタンを押して再度マクロを実行します。
エラーが出た所を再度コメントアウトし、これをエラーが出なくなるまで繰り返します。
エラーが出なくなったので、プログラムが動くか試しましたが、動きません。
(今回はこの前に余分な行を削除しましたが、このプログラムの場合 マクロの実行→コメントアウト を繰り返すことで不自然に数行が挿入されます。)
コマンドボタンからプログラムを実行させる
メニューバー「表示(V)」→「ツールバー(T)」→「フォームコントロール(J)」を選択
一番上の右側「デザインモード オン/オフ」をクリック。
「書き込み」ボタンを右クリック→「コントロール(T)」
「イベント」タブをクリック
↓
「実行時」の右側にある小さなボタンをクリック(…と表示)。
右側の「マクロ(A)」をクリック
ボタンを押した時に実行させたいプログラムを選択→「OK」ボタンをクリック
再び、一番上の右側「デザインモード オン/オフ」をクリック。
「書き込み」ボタンを押すと動くかテスト。
挿入された行だけ、時間が正しい形式で表示されていません。
時間を正しい形式で表示させる
時間を入力するセルが挿入される一つ上にある、「時間」と書かれたセルを右クリック→「セルの書式設定(F)」をクリック
(プログラムを用いて最初の行を挿入する仕組みになっているため、時間が入力されるセルは一つ上の物と同じ書式になります。)
(ここは文字列が入力されていますが、)
「カテゴリー」から「日付」を選択→「形式」が「1999/12/31 13:37」(YYYY/M/D H:MM)を選択→「OK」ボタンをクリック
再びテスト。
日時が正しい形式で表示されました。
(「時間」を記録するセルの右側の罫線が表示されていません。Ubuntuで開くとこの部分も罫線が表示されていましたが、Windows Vistaでこれを直す方法はまだ見つかっていません。)
このあとに、元のEXCELファイルかバックアップしておいたデータを貼り付けて、ワークシートを復元されることをおすすめします。
以上、最後までお付き合いいただいて、ありがとうございました。
最後に
ここに書いたこと以外にも、他にも対策が必要になることも考えられる。
(LibreOfficeが進化してくると、VBAの関数などで対応できる物が増えてきて、将来的にこの操作が必要なくなってくることだろう。)
実際のVBAのプログラムを例に、LibreOffice BASICで動くようにする操作を冊子のような物にまとめてみた。
必要であれば、参考にしていただければと思う。
http://freesol.web.fc2.com/application/VBAtoLibreOffice.pdf
→LibreOfficeでVBAを動かす 関西LibreOffice勉強会
(VBAがLibreOfficeで動かない理由とそのとき考えた対策)