Excel VBAでmscomm(Microsoft Comm Control)を使ってシリアル通信を実現したいです。
今までXPのコンピュータで動作していたのですが、本部の指示でWindows10に統一することになりました。
エクセルファイルをうつしてVB6のランタイムを入れていくつかのエラーは回避できたのですが、どうしてもエラーが出る箇所があります。
フォームのボタンを押したら以下のコードが実行されます。
--- エラーの出ている箇所
VBA
1Private appComm As New MSComm 'Serial通信Object MSCommの宣言 2 3Public Function InitFieldMeter(bInit As Boolean) As Boolean 4 Dim sBuf As String 5 Dim nSta As Integer 6 Dim nRet As Long 7 8 sBuf = Space(20) 9 InitFieldMeter = True 10 appComm.CommPort = m_adr(m_nType) ''' *** ←エラーの出る箇所 *** 11 appComm.Handshaking = comXOnXoff 12 appComm.Settings = "115200,N,8,1" 13 appComm.PortOpen = True 'ポートOPEN 14 15 'Leaser がすでにONになっているか調べる 16 appComm.Output = ":n" + vbLf 'Read Laser current 17 sBuf = Space(30) 18 Sleep (20) 'データ受信開始まで少し待つ 19 sBuf = appComm.Input '例 ":E3 :n0.000 :E3 " 20 21 If InStr(Trim$(sBuf), ":n0.000") > 0 Then 22 'Leaser電流が0.000の場合はLeaserをONにする 23 appComm.Output = ":r" + vbLf 'Laser ON 24 Sleep (5000) 'Laser ON後に使用可能になるまで少し時間が必要 25 End If 26End Function
エラー内容
実行時エラー '429':
ActiveXコンポーネントはオブジェクトを作成できません。
--- 今までやってみたこと
0. 参照設定で「Microsoft Comm Control 6.0」が追加されていなかったので追加
0. 上記参照設定を終えたあとに、フォーム編集画面のツールボックスに電話のマークの「MSComm」が追加されたので、フォームに追加しようとすると「サブジェクトは指定された操作に対して信頼されていません」とエラーが出る
0. 上記エラーを検索し、「https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1027494815」このページに記載のある方法をすべて試すも解決せず。(KB969898を削除しようにも見つからない・ランタイムなので「Microsoft Visual Basic 6.0 Service Pack 6 累積的な更新プログラム」がインストールできない・レジストリも指示通り変更済み)
--- 使用環境
Windows 10 Pro 64bit
Microsoft Office Professional 2016 32bit
--- インストールしたもの
Visual Basic 6.0 SP6 ランタイムライブラリ 第4版
http://www.vector.co.jp/soft/win95/util/se188840.html
Visual Basic 6.0 SP6 ランタイムファイル 3.40
http://www.vector.co.jp/soft/win95/util/se342080.html
もう丸二日ほどこのエラーで時間を使って疲れてしまいました^^;
もうここに質問するしか道は残ってません!
お知恵をお借りできれば幸いです。よろしくお願いいたします。
2019年3月13日 11時00分 追記
別のパソコンで同じように作業をしたところ、エラーが出ていた箇所を進めることができました。
ただ、まだ原因がわからない状態が続いているため、問題が発生しているPCで検証を進めています。
2019年3月13日 16時47分 追記
別のパソコンの環境は、OSは同じですがOfficeがProfessional 2013でした。
さらに別のパソコンで試しました。環境はOSがWin7、OfficeがProfessiolal 2013です。
こちらもうまくいきました。もしかしてOfficeの2016がだめ?
2019年3月14日 8時44分 追記
レジストリエディターで「648A5600-2C6E-101B-82B6-000000000014」を検索したところ、変更できる箇所が2箇所ありました。
- HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\ActiveX Compatibility{648A5600-2C6E-101B-82B6-000000000014}
- HKEY_LOCAL_MACHINE\Software\Microsoft\InternetExplorer\ActiveXCompatibility{648A5600-2C6E-101B-82B6-000000000014}
上記2箇所のCompatibility Flagsの値を400hから0に変更したところ、ツールボックスからフォーム上にMSCommを挿入しようとしたときのエラーが「正式にライセンスされていないため、コントロールを作成することはできません。」にかわりました。
情報の追加をしてくださった方からの情報を元に、Office2016のKillbitの設定も施しました。
- HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Common\COM Compatibility{648A5600-2C6E-101B-82B6-000000000014}
上記レジストリのCompatibility Flagsを0に設定したところ、エラーが「アクセスが拒否されました。」に変わりました。
2019年3月16日追記
いろいろと試しましたが結局ダメでした。
仮想環境でWindows10 Office2016をインストールして試してみましたが同様のエラーで止まってしまったので、おそらくOffice2013までなら大丈夫だけど2016はだめとかそういう感じなのかなと推測します。
EasyCommという簡易なシリアル通信のクラスを見つけたので、観念してプログラムを書き換えることにします。
回答2件
あなたの回答
tips
プレビュー