【LibreOffice】Excel VBAマクロを使う方法

要約

Option VBASupport 1

Option VBASupport Statement

マクロの1行目に上記を書くだけで、VBA互換として動作します。

かなり互換性はあると思うが、躓いたときに自身で解決できない可能性&ネットに情報があまりないというのはあると思う。

EXCELがないけど、EXCAL VBAマクロの勉強したい、簡単なサンプル動かしたいという程度なら使えると思う。が、これも落とし穴があって、動かない時&エラーになった時に、自身が間違ってるのか?LibreOfficeだからか?の区別がつかないと思う

全角スペースの問題

ネットでプログラム(VBAマクロ)をコピペした時に、全角スパースが混ざってて動作しないとかいうのがたまにある。理由は不明だが、EXCELのほうに貼り付けると、全角スペースが半角スペースに自動で変換してくれて、何もなかったかのように動作する。すごい親切機能だと思う。

LibreOfficeでは、全角スペースだと絶対に動作しないので、コピペするときは注意!!

実際に動作させてみる

メニューバーの「ツール」=>「マクロ」=>「マクロ管理」=>「LibreOffice Basic」を選択します。

Option VBASupport 1
REM  *****  BASIC  *****

Sub Main
 With Worksheets("Sheet1")
  For i = 1 To 10
     .Cells(i, 1).Value = i
  Next
 End With
End Sub

上記のようなコードを動かしてみます。普通に動作します。

「Option VBASupport 1」がないと、エラーになるのも確認できるかと思います。

ファイル保存時に注意

・ods形式 =>情報の欠落なく完全に保存される
・Excel2007-365のファイル形式の場合は、xlsm(マクロ有効)でないと、VBAマクロの情報がすべてなくなります。

「Excel2007-365 xlsm(マクロ有効)」「Excel97-2003 xls」であっても、条件によって、VBAコードの一部の情報がなぜか落ちます。互換性のない部分が落ちるのかも。

あと、Excel(マクロ有効)のファイルを読み込んで、ods形式に書き込んでも、互換性のない部分は削除されてしまうようです。いろいろこのあたり、ハマりどころがありそうです。

マクロ関係のセキュリティーの設定

ファイル保存時に「Excel2007-365 xlsm(マクロ有効)」がない場合は、このあたりの設定を変更すると出てきた記憶が・・。

VBAの互換性について

Excelでブロック崩しをする
VBAマクロの実行は、自己責任で!!Excelでブロック崩し・ブロック崩しゲームを創る - 情報授業実践記録上記をみて、ちょっと興味を持ちました。上記にソースは公開されてる

少し使ってみて互換性が高そうなので、ゲームも動作するよ!!っていう話でまとめたかったんですが、実際にはそうならず。

420 無効なオブジェクトリファレンス
423 属性またはメソッドが見つかりません
424 オブジェクトが必要です
425 無効なオブジェクトの使い方です
Basic プログラムのデバッグ - LibreOffice Help

実行すると、こんなエラーに。エラーコードを調べると「属性またはメソッドが見つかりません」で、たしかに「TopLeftCell」がサポートされてなさそう。

スポンサーリンク
コメント一覧
  • 名前:himajin100000 :

    細かい差:

    https://mobile.twitter.com/hiddenbugs/status/1150487884790521856
    https://mobile.twitter.com/hiddenbugs/status/1150512759789907969

    演算子の優先順位の差
    tdf#52601 Excel Visual Basic compatibility issue in LibreOffice Calc: If Not ... Like … Then

    lineやnameという識別子が使用可能な場所
    tdf#47214 LINE INPUT is not recognized after a colon

    省略可能引数の扱われ方(String型のデフォルト値は使われない)
    tdf#118544 Optional macro parameter defined as Integer has type Variant/String causing type errors in the macro
    tdf#36737 default values for optional parameters are not processed
    tdf#79426 Macros: Passing an error object to a function causes a run time error.

    省略可能引数のあるユーザー定義関数がCalcの数式で使われたときの挙動
    tdf#102381 A user function called from a Calc formula wrongly gets passed numeric 0 for missing optional parameters.

    関数の戻り値の仕組み:最初のパラメータとしてこっそり追加されるSbMethod
    tdf#57308 Basic IDE: watching of variable not working if variable is returning value of function

    For文は代入文ではない
    tdf#85371 Redim with function name

    LibreOfficeは太さをmm単位で記録し、MS Officeは列挙体で管理する。
    tdf#90278 VBA Compatibility - Regression on Range().Borders().Weight()

    実装されていない
    tdf#99514 FILEOPEN .xlsm error 37 times: BASIC runtime error. '423' Value2
    tdf#58541 BASIC: BASIC runtime error '423' OnSheetActivate
    tdf#118493 xlt file with macros BASIC runtime error. '423' Panes

    実装されていない: 文字列とオブジェクトは別物として扱われているから治すのが厄介
    tdf#102078 Excel XLSM import with VBA: calling function fails with bogus "Object variable not set" 文字列にCharsプロパティがない

    実装が悪い・いい加減・中途半端
    tdf#120504 VBA Worksheet.PrintOut method prints active sheet, not the one that calls the method
    tdf#118146 VBA Macro: Application.ActiveWorkbook.SaveAs saves invalid files
    tdf#102076 Excel XLSM import: VBA compatibility mode insufficient: "EVALUATE" not supported