お世話になります。
excel vbaからlibreofficeに移行しようと考えているのですが
vbaと同じようにパスワードを掛けるとエラーが出てbasicが動作しません。
vbasupport1 で日本語関数・日本語変数を使っていますがこれが原因なのでしょうか
vbasupport1 が使える以上、できれば現状態でパスワードを掛けたいです。
よろしくお願いします。
お世話になります。
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
検証までしていただきありがとうございます!
自分ではまだ実験できていないですが週明けに変数のみ日本語に変更して本番マクロが実行可能かテストしてみます。
bug159808の報告は私です。急ぎの用でしたので複数のプラットフォームに投稿させていただきました。
問題の詳細が見えてきたので追記いたします。
今回の問題は「パスワードを掛けたら動かない」ではなく「パスワードを掛けたら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にはかけられないようですね。ハックフェストではそこで諦めたのですが、以下でパスワードはかけれました。
ちなみに、ライブラリ作成で日本語だと「名前が無効です」になるので、ライブラリ名は多言語対応してなさそうです。
で、パスワードかけても問題は再現しないので、サンプルファイルと再現手順があるとありがたいです。
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
@sabr0 ご協力ありがとうございます。sabr0様マクロの作成ありがとうございます。エラーが再現しました。
このエラーはlibre officeのバグということで回避は難しそうです。ひとまずvba support1を使用しない方向で進めていきます。