2022年8月4日木曜日

ウインドウズ版Officeのマクロ付きファイルで、ActiveXを使っていると、メッセージ バーでセキュリティ警告の出てくるような時代だからな ー ActiveXコントロール(VBA)

      
マイクロソフトコミュニティは、質問を投稿したら回答を得られるサイトです。
専属エンジニアから回答がもらえる無料サービスで、対象は当然の同社の製品。

WindowsやOfficeの使い方、トラブルで相談できますが、変わった質問もある。
それは、”MacOffice2021を購入。Excelマクロが作動しません。”という質問。

実行時エラー429が出て、ActiveXコンポーネントはオブジェクト作成が無理。
そんな表示が出されるようですが、当然、MacはOSがウインドウズじゃないよ。

このActiveXは、ウインドウズに固有な技術で、通信ネットワークの制御技術。
インターネットを通じてコンピュータ上でソフトウェアを動作連携させるもの。

だから、データやプログラム部品をやり取りするための技術や製品・仕様なの。
だとしたら、OSが違えば相乗りしていない限り、使える分けがありませんな。

もっとも、このActiveXは、かなりお古な仕様なので、セキュリティがぜい弱。
なので、ネットでウイルス侵入の足掛かりを図るベースにもなったりまします。

片や、”Office for Mac"はリリースから三十年以上も経過して歴史があります。
それだけ、ビジネスツールとしてOfficeは欠かせないものだったのでしょうな。

それで、このActiveXというのをエクセルのマクロで使った場合の話をします。
開発タブをクリックさせて、次に挿入アイコンのクリックで、ActiveXの登場。

”ActiveXコントロール”の欄もありますが、上部は”フォームコントロール”だ。
もし、シートにコマンドボタンを置くだけなら、フォームコントロールが便利。

簡単に設定ができるからですが、ボタンのデザイン変更などは融通が利かない。
あくまでも、機能優先のボタンなので、使う際には割り切った方が良いだろう。

一方、ActiveXと言うのは、上述のようにプログラム部品をやり取りできます。
このため、ユーザーフォームと言う、ワークシートに付随する書式が作れるの。

これが便利でして、VBAのプログラミングに慣れた方なら多く使うはずですな。
でも、MacのPCだと、オフィスをインストールしても、これが使えないのです。

つまり、ウインドウズでこさえたマクロファイルは、Macでは使えない可能性。
これを克服するには、ユーザーフォームをワークシートで疑似的に表示させる。

そんな工夫から作ってみたのが次のコードで、ウインドウズは動作確認済みだ。
でも、小生はMacを持っていないので、動くのかどうかは皆目見当がつかない。

というわけで、それなりに動作するので、ユーザーフォームの代用になりそう。
本当は、ユーザーフォームで使うコンボボックス等の登録が、フォームコントロールではShape扱いになっており、少し挙動が違う点も書きたかったのですが、それは次回に譲るとして、参考になってくれればと思ったのでした。

※ブックにシートを二枚設け、Sheet1は作表用、Sheet2はユーザーフォーム。
<Module1の記述、各シートにユーザーフォームのコマンドボタンを置く>
Sub Button1_Click() 'Sheet1にボタン1を置き、ユーザーフォーム呼び出し
Worksheets("Sheet2").Activate
End Sub

Sub Button2_Click() ’Sheet2にボタン2を置き、作表のSheet1に戻る
Worksheets("Sheet1").Activate
End Sub

<作表用のSheet1にコード記述、Sheet2のボタン2で戻った時の表示>
Sub Worksheet_Activate()
With ActiveWindow 'タブとかグリッド線とかを再表示させる
     .DisplayGridlines = True
     .DisplayWorkbookTabs = True
     .DisplayHeadings = True
     .DisplayHorizontalScrollBar = True
     .DisplayVerticalScrollBar = True
End With
With Application
     .DisplayFormulaBar = True
     .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
     .WindowState = xlMaximized 'シートに戻った時最大表示にする
End With
End Sub

<作表用のSheet2にコード記述、Sheet1のボタン1でフォーム表示仕様>
Sub Worksheet_Activate()
With ActiveWindow 'タブとかグリッド線とかを非表示
     .DisplayGridlines = False
     .DisplayWorkbookTabs = False
     .DisplayHeadings = False
     .DisplayHorizontalScrollBar = False
     .DisplayVerticalScrollBar = False
End With
With Application
     .DisplayFormulaBar = False
     .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
     .WindowState = xlNormal 'ユーザーフォームのサイズ指定をする
     .Width = 300 '数値は任意、お好みで
     .Height = 300  
End With
End Sub



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



0 件のコメント:

コメントを投稿