2022年3月17日木曜日

マイクロソフトは、オフィス365ユーザーに対して、”Excel 4.0マクロ(XLMマクロ)”のレガシー機能を無効の予定と発表したのが残念 - Excel4Macro(VBA)


エクセルでマクロを仕込んだブックファイル形式は、二種類が存在しています。
一つは、標準的な”*.xlsm”で、もう一つはバイナリー形式の”*.xlsb”でしたな。

それで、標準的なファイル形式では問題なく動作しても、バイナリーがエラー。
エラーコードの91番が出て、オブジェクト変数が未設定だと警告されてしまう。

或いは、Withブロック変数が設定されていないとも警告されるのですが戸惑う。
今回は、ブック起動時にブックを最小化してユーザーフォームを開く設定です。

書いたコードもシンプルで次のようになりますが、変数設定もされていません。
しかも、同じ内容でも標準ファイル形式のブックは、完全動作なのが不思議ね。

まあ、たまさか動いたとして、ユーザーフォームも最小化されてしまいました。
なので、タスクバーのエクセルアイコンをクリックで、フォームを呼び出すの。

Private Sub Workbook_Open()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
ActiveWindow.WindowState = xlMinimized
Load UserForm1
UserForm1.Show vbModeless
End Sub

上のコードは、問題になる部分を抜き書きしたので、実際はもう少し煩雑です。
ですが、キモになるコードはこれだけで、どうも”ActiveWindow”が怪しそう。

だって、オブジェクト変数の設定をするとすれば、Windowぐらいなものです。
なので、変数を設定して、Setで指定するコードに書き直して実行してみました。

Private Sub Workbook_Open()
Dim Wn As Window
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Set Wn = ActiveWindow
Load UserForm1
Application.WindowState = xlMinimized
Call Workbook_WindowResize(Wn)
End Sub

Private Sub Workbook_WindowResize(ByVal Wn As Window)
If Wn.WindowState = xlMinimized Then
UserForm1.Show vbModeless
End If
End Sub

すると、あら不思議、問題は収まってくれてバイナリーのブックでエラーなし。
ちゃんと起動してくれましたが、ウインドウを変数にして状態確認させただけ。

ですが、エラー91の出現を抑えるのには、これしかなかったという次第です。
それから、プロシージャを変数渡しで二つに分ける必要もないのですが保険だ。

変数を使って渡して、その挙動を確認させておけば変数の意味がはっきりする。
というわけで、ExecuteExcel4Macroという古色蒼然たる、コードが問題かな。

かなり初期のExcel4.0マクロから組み込まれていたものですが、VBAが使える以前から存在していたという古語で、マイクロソフトもVBAへの移行を推奨する中で、このコマンドに代わるものがない以上、使わざるを得ないなと思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿