• ベストアンサー

エクセルVBAでRS232通信は可能ですか?

VBAでシリアル通信したいのです。 VBでは下の検索結果にあるようにmscommが使えます。 VBAではmscommが使えませんでした。制限があるのでしょうか? VBAで行う方法をご存知の方教えてください。 http://www.okweb.ne.jp/search.php3?dummy=%83%81%81%5B%83%8B&c=218&kw=mscomm

noname#90404
noname#90404

質問者が選んだベストアンサー

  • ベストアンサー
  • etosetora
  • ベストアンサー率22% (39/175)
回答No.1

トランジスタ技術という雑誌があります 過去に何度か取り上げられている記事の中で 木下隆さんの記事があります 下記のURLが参考になると思います

参考URL:
http://activecell.cool.ne.jp/easycomm/index.htm
noname#90404
質問者

お礼

アドバイスありがとうございました。 このURLにはわたしも目をつけていました。 非常に参考になりました。 VBAでもmscommを標準にしてくれても良いのに... どうもありがとうございます。

関連するQ&A

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • VB.NETでのシリアル通信

    .NET初心者です。 VB.NETでシリアル通信をしようとしています。 参照設定のところに Microsoft MSCOMM CONTROLというのがあったので 選択しました。 すると、MSLib.MSCommというのがでてきたので Vb6の Dim test As mscomm のように宣言して使えるかと思い Dim test As MSLib.MSComm test.PortOpen と書いてみたところ、 オブジェクト参照・・・インスタンス化されていません。と、エラーがでました。 ブレイクしてみたところ、test = Nothingでした。 testが無いのでインスタンス化されていないという エラーがでるのだなということは分かったのですが なぜこのエラーがでるのか、 どうしたらこのエラーを回避し、 .NETでシリアル通信ができるのか教えてください。 よろしくお願いします。

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

  • 教えて!gooの検索後のアドレス内のdummyって・・・

    教えて!gooで、例えば「教えて!goo」を検索したとします。 するとアドレスが http://oshiete1.goo.ne.jp/goo_search.php3?dummy=%A5%E1%A1%BC%A5%EB&MT=&TAB=&kw=%B6%B5%A4%A8%A4%C6%A1%AAgoo&c=0 となります。 で、この中の dummy=%A5%E1%A1%BC%A5%EB ってのがすごく気になるんです。 調べたらこれは dummy=メール って書いてあるんです。 どういう意味ですか?

  • シリアル通信について

    質問です。 仕事でシリアルプリンタをMSCommで制御しています。 開発環境はVB6(SP5),XPです。 MSCommにて印字データを一度に沢山送ると情報落ち(?)した印字内容になってしまいます。多分プリンタ内のバッファ(みたいなもの)が一杯になるかして、プリンタの処理能力が限界なのかと勝手に思ったりもしています。 ちなみに10秒間隔くらいで送れば大丈夫です。 一方、シリアル通信の実験としてTera Termを使用しています。Tera Termだと一度に沢山のデータを送っても問題ないです。Tera Termはそこらへんを制御しているのでしょうか? また、MSCommにもそのようなことができるのでしょうか? よくわからない質問かもしれませんが、どんな些細なことでも結構ですのでご教授願います。

  • エクセルVBAのについて。

    エクセルのVBAマクロで検索と結果表示(抽出)を行いたいです。 1つの行からだけでなく、複数行(例A行、B行、C行)から検索を行いたい場合、どのようにすれば良いでしょうか? よろしくお願いします。

  • VB RS-232C 通信プログラム

    何度もお世話になっております。(VB6.0 MSCommを使用した通信プログラムを作成中です。)私は新卒で食品会社に入社したのですが,プログラムの分かる上司が身近では誰1人といない状況で困っています。 今作成しているのは,重量計に荷物が乗った段階で作業者がデータ転送ボタン(重量計についている)を押すと,重量計のデータ(500kgというデータ)をシリアルでCOM1に取り込み,フォームにエクセルのセルを作成し(OLEを用いて)保存できるようにしたいと考えています。 (重量計から送られてくるデータのフォーマット) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 S T , N T , + 0 0 1 2 . 3 4 k g CR LF ST ; ヘッダ1 NT ; ヘッダ2  CRLF ; ターミネータ                   の18バイトのデータです。 ここで質問なのですが (1) 以下のプログラムで重量はバイト配列に受信できていますでしょうか?(実際に重量計とPCを接続できれば良いのですが工場の稼動状況が関わっておりすぐにはできません。) (2) 18バイトのデータを受信するからと言って RThreshold = 18 として良いのでしょうか? 普通,データは1バイトずつ送られてくると思うので RThreshold = 1としてイベントを発生させる必要があるのかとも思うんですが。 'MSComm1,2(COM1,2)コントロールの初期設定 Private Sub Form_Load() MSComm1.CommPort = 1 '通信ポートを設定 MSComm1.Settings = "9600,n,8,1" '通信条件の設定 MSComm1.RThreshold = 18 '固定長のデータ End Sub Private Sub Port1_Click() 'Port1_Clickのクリックイベントプロシージャ If MSComm1.PortOpen = False Then 'シリアルポートのオープン MSComm1.PortOpen = True End If LPort1.Text = "" 'テキストボックスのクリア受信 End Sub Private Sub MSComm1_OnComm() '受信のOnCommイベント Dim Buffer1(0 To 17) As Byte '受信バッファの変数宣言(18バイト) Select Case MSComm1.CommEvent 'CommEventプロパティに対する処理 Case comEvReceive '受信データ有り    Buffer1 = MSComm1.Input '受信データをバッファに格納 'これより下は受信した18バイトから必要なデータ8バイト目から4バイト分切り出し,dという配列(4バイト)に格納できないかと考えました。 Dim i As Integer Dim d(0 To 3) As Byte d = MidB(Buffer1, 8, 4) LPort1.Text = d 'LPort1.Text = Buffer1 '受信データをテキストボックスに表示 End Sub

  • COM16以上を設定を使用してシリアル通信したい

    現在、VB6.0を使用してシリアル通信の制御をしたいのですが、MSCOMMを使用するとCOMポートの番号が16以上のポートを設定しようとするとエラーになってしまいます。(私の設定がおかしいのかもしれませんが・・・。) 通信ポートを16以上のポートも使用できるようにするにはどの様にしたらいいのでしょうか?

  • シリアル通信のイベント受信について

    現在VB6.0を使用してシリアル通信のプログラムを MsCommを使用せず、CreateFileを使用して行っておりますが、 データの受信を受信したタイミングでテキストボックスに表示したいのですが どの様にすると受信したタイミングでデータを取得できるのかわからず困っております。

  • RS-232Cのコマンドについて

    はじめまして。 RS-232C通信にて計測器からデータを取得します。 計測器の仕様では、 『呼び出しコマンドが「0x08」でデータが吐き出されます。 ハイパーターミナルで言えば、Ctrl + H のコマンドです。』 と記載されています。 VB6.0のMSCommコントロールを使用して、コマンドを送出して、データを得たいです。 この場合、コマンド送出はどのように記述すればよいのかわかりません。 MSComm.Output = "H" ← Hですか?? コマンドの意味を理解できていなくて、困っています。 初心者でお恥ずかしい質問ですが、教えてください。 宜しくお願いします。

専門家に質問してみよう