VB6ランタイムを使用したVBAでちょっとトラブったので、メモです。
【使用環境】
・Windows10-64ビット
・Office2016
・MSCOMM32.OCXほか
【症状】
VBAでシリアル通信を、「MSCOMM32」で行おうとした場合に、
MSCOMM32のレジストリ登録済みで、コントロールにアイコンが表示されるものの、
フォームに貼り付けようとすると、以下のメッセージが出て貼り付けられない。
”サブジェクトは指定された操作に対して信頼されていません。”のメッセージが表示される。
【原因】
ActiveXコントロールがセキュリティ上、キラービットにより停止されているため。
【対処法①】※マイクロソフトサポートページより引用
(1)対象のランタイムのCLSID(クラスID)を、レジストリエディタ(regedit)上の
『HKEY_CLASS_ROOT』で検索をかけ、その中で、下記に合致するものを特定する。
『HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility』。
例:”MSCOMM32”で検索し合致したのは、以下。
{648A5600-2C6E-101B-82B6-000000000014}
(2)『Compatibility Flags』の値を0x00000400から
0x00000000に変更する。
【対処法②】本題です。
しかし対処法①では、Windows8.1、10では解決できませんでした。
そこで、いろいろな方法を試していたところ、
とあるフリーソフトで変更すると、使用可能になりました。
それは、『ActiveX Compatibility Manager v1.00』(http://www.nirsoft.net/utils/acm.html)
というActiveXの有効化/無効化ツールです。
※日本語化のパッチも同ページの下のほうに掲載あり。
赤●:無効、 緑●:有効。 『ファイル説明』で検索も可能。
選択後、ツールバー上の緑●のボタンをクリックすると、
赤→緑に変わり、使えるようになります。
再度、レジストリエディタで確認すると、0x00000000に変更されている
のを確認できました。
こちらのソフト、2004年のものでC++で作られてるようですが、
なぜレジストリエディタと挙動が異なるのかは、わかりません。
わかる方、ぜひご教示お待ちしております。
(※不詳なActiveXコントロールの不用意な有効化はお勧めしません。念のため。)

