質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

22158閲覧

Excel VBAでmscomm(Microsoft Comm Control)を使ってシリアル通信を実現したい

Himamura

総合スコア39

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/03/13 01:02

編集2019/03/16 07:32

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 累積的な更新プログラム」がインストールできない・レジストリも指示通り変更済み)

ツールボックス内の電話マークがMSComm
エラー


--- 使用環境
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という簡易なシリアル通信のクラスを見つけたので、観念してプログラムを書き換えることにします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VB6のDLLは、どこに入っていますか?
32ビットのDLLを動かすには、WINDOWS¥SysWOW64にある必要があります。

多分、これだけではないとは思います。外していたらごめんなさい。もっと詳しい諸氏の回答・コメントが付くといいですね!

(まだ、VB6を動かすんだ・・。やっかいですね。・・とは、余計な一言ですが。失礼。)

投稿2019/03/14 03:01

aki.aki.

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Himamura

2019/03/14 23:36

ご回答ありがとうございます。 VB6のDLLは対象のディレクトリに存在しました。 参照設定も成功しているようです。 私にVB6から脱却できる技術があればいいのですが・・・ VB6をやめて作り変えるときにはまたteratailに質問するかもしれませんね笑
guest

0

自己解決

EasyCommという簡易なシリアル通信のクラスを見つけたので、観念してプログラムを書き換えることにしました。

投稿2019/03/19 05:10

Himamura

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUKHOI_31M

2019/08/26 04:03

私も「正式にライセンスされていないため~」のメッセージで数日悩み、こちらのサイトにたどり着きました。 自分の手順が間違っていなかった事が確認できて、とても助かりました。 MSComm32.ocxは、あくまでランタイム使用時にフリーライセンスであり、フォームに貼り付けたり編集を加える場合は別途ライセンスが必要なようですね。 そのライセンスはofficeには含まれておらず、私のような難民が発生する訳です(笑)。 もしVB6をお持ちでなければ、Visual Studio Express 2017をインストールしてみてください。 私の場合、それで解決しました。
Himamura

2019/08/26 04:07

ご回答ありがとうございます! なるほど、別途ライセンスが必要なんですね・・・ 後ほどVS Express 2017のインストールを試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問