none
COM送受信が上手く出来ません。 RRS feed

  • 質問

  • 初めまして。エクセルVBAでCOM通信をやりたいと思っていますがどうしても動きません。ネットにあるいろいろな記事やサンプルを試してもエラーが出てしまいます。お聞きしたいことは沢山あるのですがまず下記のエラーについて知りたいです。

    MSComm1.CommPort = MyComm.ComName

    この行について「オブジェクトまたはライブラリがありません」と言われます。ネットにあったサンプルのコードです。

    MSComm1はちょくちょく出てくるようですがどうやって登録するのでしょうか。

    C#初心者から相当時間をかけてCOMの送受信はできるようになりましたが今回エクセルの方が都合がよかったのでVBAの方がよいかと思い挑戦しています。何かよい資料などがありましたら教えていただけると大変ありがたいです。

    2019年12月9日 0:50

すべての返信

  • C# が使えるなら、スレッド管理の観点からも C# で実装した方が良いとは思うのですけれどね。

    Excel から利用するなら、木下氏の作成した EasyCom は如何でしょうか? 64bit 対応にする場合は、少し手を加える必要がありますけれども。

    MSComm1はちょくちょく出てくるようですがどうやって登録するのでしょうか。

    MSCOMM がインストールされている場合には、Excel のユーザーフォームから [ツールボックス] を右クリックして[その他のコントロール...]から「コントロールの追加」を選ぶことで、"Microsoft Comm Control" を指定できるようになるので、それを貼り付けて利用します。

    MSCOMM はそもそも Microsoft Office の一部ではなく、Visual FoxPro や Visual Studio 6.0 といった開発言語製品に付属していた ActiveX コントロールであり、これらと共にインストールされます。

    そのため実行環境には、mscomm32.ocx ファイル(およびその依存ファイル群)が必要となります。ランタイムの再頒布は無償で可能ですが、ファイル単体での配布は許可されていませんし、どこかのサイトで拾ってきたものを二次配布するようなことも許可されていない点に注意して下さい。

    また、Excel 等に貼って使うには、ランタイムの他に開発時(デザインタイム)ライセンスも要求されます。デザインタイムは再頒布することができません。コンパイルして配布するタイプのアプリ(VB や C# など)なら、コンパイル時に必要なだけで、実行環境にデザインタイムライセンスの登録は不要なのですが、Excel の場合はコンパイルして埋め込むものではないので、実行環境であってもデザインタイムが要求されると思います。

    また、このコンポーネントの 64bit バージョンは恐らく出ていないので、32bit バージョンのアプリケーションからしか呼び出せません。MSCOMM は KillBit 対象になったため、Office からの利用が制限されている点も注意事項です。

    2019年12月9日 1:37
  • いつも詳しい説明を頂きましてありがとうございます。いろいろとあるのですね。今はC#から開いているエクセルに直接編集できる良いサンプルを見つけましたので急ぎもあってそちらで進めています。ちょっとスッキリ感がないのですがVBAは追々調べて行こうと思います。
    2019年12月10日 4:04