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

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

ただいまの
回答率

87.61%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 10K+

score 23

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

今までXPのコンピュータで動作していたのですが、本部の指示でWindows10に統一することになりました。
エクセルファイルをうつしてVB6のランタイムを入れていくつかのエラーは回避できたのですが、どうしてもエラーが出る箇所があります。

フォームのボタンを押したら以下のコードが実行されます。


--- エラーの出ている箇所

Private appComm As New MSComm   'Serial通信Object MSCommの宣言

Public Function InitFieldMeter(bInit As Boolean) As Boolean
    Dim sBuf As String
    Dim nSta As Integer
    Dim nRet As Long

    sBuf = Space(20)
    InitFieldMeter = True
    appComm.CommPort = m_adr(m_nType) ''' *** ←エラーの出る箇所 ***
    appComm.Handshaking = comXOnXoff
    appComm.Settings = "115200,N,8,1"
    appComm.PortOpen = True         'ポートOPEN

    'Leaser がすでにONになっているか調べる
    appComm.Output = ":n" + vbLf    'Read Laser current
    sBuf = Space(30)
    Sleep (20)              'データ受信開始まで少し待つ
    sBuf = appComm.Input    '例 ":E3 :n0.000 :E3 "

    If InStr(Trim$(sBuf), ":n0.000") > 0 Then
        'Leaser電流が0.000の場合はLeaserをONにする
        appComm.Output = ":r" + vbLf    'Laser ON
        Sleep (5000) 'Laser ON後に使用可能になるまで少し時間が必要
    End If
End Function

エラー内容
実行時エラー '429':
ActiveXコンポーネントはオブジェクトを作成できません。


--- 今までやってみたこと

  1. 参照設定で「Microsoft Comm Control 6.0」が追加されていなかったので追加
  2. 上記参照設定を終えたあとに、フォーム編集画面のツールボックスに電話のマークの「MSComm」が追加されたので、フォームに追加しようとすると「サブジェクトは指定された操作に対して信頼されていません」とエラーが出る
  3. 上記エラーを検索し、「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という簡易なシリアル通信のクラスを見つけたので、観念してプログラムを書き換えることにします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • atata0319

    2019/03/13 20:25

    もしかしたら Office 2016 では IE 側のレジストリだけではダメなのかもしれませんね。以下の URL に Office 2016 の設定が記載されているので、試されてはどうでしょうか?
    https://support.microsoft.com/ja-jp/help/4058123/security-settings-for-com-objects-in-office

    キャンセル

回答 2

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/15 08:36

    ご回答ありがとうございます。
    VB6のDLLは対象のディレクトリに存在しました。
    参照設定も成功しているようです。

    私にVB6から脱却できる技術があればいいのですが・・・
    VB6をやめて作り変えるときにはまたteratailに質問するかもしれませんね笑

    キャンセル

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/26 13:03

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

    キャンセル

  • 2019/08/26 13:07

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

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る