Libreoffice basicにパスワードを掛けると正常に動作しない

お世話になります。

excel vbaからlibreofficeに移行しようと考えているのですが
vbaと同じようにパスワードを掛けるとエラーが出てbasicが動作しません。

vbasupport1 で日本語関数・日本語変数を使っていますがこれが原因なのでしょうか
vbasupport1 が使える以上、できれば現状態でパスワードを掛けたいです。
よろしくお願いします。

下記バグ報告をされた方でしょうか?
Bug 159809 - Variable undefined error occurs when macro is password protected (Japanese)

テストコード

REM  *****  BASIC  *****
Option Compatible

Public メッセージ As String

REM *** 実行不可 ***
Sub Main
	メッセージ = "日本語マクロ名呼び出し"
	Call メッセージボックスを表示
End Sub

Sub メッセージボックスを表示
	Msgbox メッセージ
End Sub
REM ******

REM *** 実行できた ***
Sub Test1
	メッセージ = "マクロ名Test1"
	Call MesBox(メッセージ)
End Sub

Sub MesBox(byVal 日本語 As String)
	Msgbox 日本語
End Sub

REM ******

ライブラリにパスワード保護すると日本語マクロ名が???になってしまい実行できなくなることが確認できました。また、[]で括っても変わりませんでした。
変数は日本語でも大丈夫そうですが、マクロ名は半角英数字とアンダーバーにとどめておいた方がよさそうです。

LibreOffice Basicの命名規則
https://wiki.documentfoundation.org/Documentation/BASIC_Guide#Markers

2 Likes

検証までしていただきありがとうございます!
自分ではまだ実験できていないですが週明けに変数のみ日本語に変更して本番マクロが実行可能かテストしてみます。

bug159808の報告は私です。急ぎの用でしたので複数のプラットフォームに投稿させていただきました。

1 Like

問題の詳細が見えてきたので追記いたします。
今回の問題は「パスワードを掛けたら動かない」ではなく「パスワードを掛けたらvba support 1が無効化される」というものでした。
具体的には、round関数・Workbooks(".ods").Sheets("").Cells(1, 2)等構文が使えないなどvba support 1を書かないことで起こるものと同じエラーが発生しています。

「パスワードを掛けたらvba support 1が無効化される」というバグはexcel vbaから引っ越す際の大きなハードルになりそうです。どうにか回避できないものでしょうか。

passVBA.ods (8.9 KB)

パスワード:pass
で、試しに作ってみましたが、
再現できません。
もしかしてパスワードの掛け方が違うのでしょうか?
再現できるファイルを作ってアップしていただければ、
何か分かるかもしれません。

Version: 24.8.0.0.alpha0+ (X86_64) / LibreOffice Community
Build ID: 43d962c27b6efb04d22b05ad8dec08f6056078a0
CPU threads: 24; OS: Linux 6.5; UI render: default; VCL: gtk3
Locale: ja-JP (ja_JP.UTF-8); UI: ja-JP
Calc: threaded

パスワードの手順についてですが、ライブラリのパスワードはStandardにはかけられないようですね。ハックフェストではそこで諦めたのですが、以下でパスワードはかけれました。

  1. ツール→マクロ→マクロの管理→Basicで「Basicマクロ」ダイアログボックスを出して、
  2. 管理ボタンをクリックして、Basicマクロ管理ダイアログを出して
  3. 「ライブラリ」タブをクリック
  4. 「場所」で、現在作成中のファイルを選択し、新規作成ボタンをクリック
  5. 作成したライブラリを選択すると「パスワード」ボタンが有効になって、パスワードを設定できました

ちなみに、ライブラリ作成で日本語だと「名前が無効です」になるので、ライブラリ名は多言語対応してなさそうです。

で、パスワードかけても問題は再現しないので、サンプルファイルと再現手順があるとありがたいです。

102780sample1.ods (12.2 KB)
上記ファイルはパスワード保護前のファイルです。

1.ボタンをクリックでマクロが動作することを確認します。
2.[ツール]>[マクロ]>[マクロの管理]>[Basic]で「Basicマクロ」ダイアログを表示
3.管理ボタンをクリックして、「Basicマクロ管理」ダイアログを表示
4.[ライブラリ]タブをクリック
5.「場所」をsampleファイルに変更し、ライブラリ「Library1」を選択しパスワードボタンをクリック
6.パスワードを設定する(1文字以上)(パスワードがかかると鍵マークが表示される)
7.開いているダイアログをすべて閉じて、ファイルを保存し一度閉じる
8.ファイルを開いてボタンをクリックする(エラーが出る)


バグレポしてました
Bugzilla – Bug 160038 VBA Compatibility:VBA functions in protected libraries don’t work

3 Likes

@sabr0 ご協力ありがとうございます。sabr0様マクロの作成ありがとうございます。エラーが再現しました。
このエラーはlibre officeのバグということで回避は難しそうです。ひとまずvba support1を使用しない方向で進めていきます。

2 Likes

@hidemune ご協力ありがとうございます。説明不足で申し訳ありません。エラーを再現するにはマクロにパスワードを掛ける必要があります。シートのパスワードは問題ないようですね。

1 Like

@enoki
ご協力ありがとうございます。sabr0様が実際のエラーファイルを作成してくださいました。その手順でマクロを実行するとエラーが発生します。

2 Likes