
No.2ベストアンサー
- 回答日時:
こんにちは。
Windowsのプログラム(VBA含む)から、COMポートを扱う場合は、WindowsAPI を使用すれば可能
だと思います。
COMポートの実装チェックには、WindowsAPI の「CreateFile」関数でCOMポートのオープンを実行
して、その関数の戻り値がエラーかどうかを見れば判断できると思います。
ただし、COMポートが実装されていてもエラーになるケース(既に使用中、使用不可に設定されて
いるなど)がありますので、その場合はエラーコードを取得してその値で「実装/非実装」を判断しな
いといけないと思います。
以下に、VBA から WindowsAPI (COMポート制御関連を含む)を利用するに当たって、参考になり
そうなサイトを上げてみました。宜しければ覗いてみて下さい。
■参考サイト
注)リンク切れの際は御容赦下さい。
1)VBAでWindowsAPIを使用してシリアル通信を行う方法
◎WindowsAPI講座
http://www.serpress.co.jp/winapi/
・このページよりリンクされている下記項目「シリアル通信(1)~(4)」のページでVBAから通信関連の
APIを使用する方法が書かれています。
NO.12 シリアル通信(1) ←必要なWindowAPI定義の説明
NO.13 シリアル通信(2) ←シリアルポートのオープンとクローズを説明
NO.14 シリアル通信(3) ←シリアルポートの通信プロトコル、送受信バッファ、タイムアウトの設定
NO.15 シリアル通信(4) ←シリアルポートの送受信方法を説明
・今回の場合は、
シリアルポートのオープン → 存在有無チェック → シリアルポートのクローズ
までを行えば良いようなので、シリアル通信(1)~(2) までを参照すれば良いと思います。
2)CreateFile関数でCOM10以上のCOMポートを使用する際の注意点
◎CreateFile関数(Win32API)でCOM10以上を使う場合の注意点
http://www.aofactory.net/log/eid328.html
・ここで、API関数「CreateFile」で指定するCOMポート名(COM1、COM2など)に「COM10」以上を使用
する場合の問題点および対策が書かれています。
・指定するCOMポートのデバイス名の頭に "\\.\" を付ければ良いようです。
VBAでの指定例: "COM10" の場合は、 "\\.\COM10" とする。
3)WindowsAPI利用でCOMポートの存在有無をチェックする方法
◎COMポートが存在するかどうかを調べるには? - OKWaveの過去ログより
http://okwave.jp/qa4033242.html
・ここで、API関数「CreateFile」が失敗した際に、同じくAPI関数「GetLastError」でエラーコードを見て
COMポートの存在有無を調べる旨が書かれています。
注)ただし、VBAでは「GetLastError」を呼んでもエラーコードが得られない可能性があるので、下記4)
の方法を採った方が良いようです。
4)VBA から Windows API を利用する方法など
◎Office VBA と Windows API - Microsoft MSDN より
http://msdn.microsoft.com/ja-jp/library/cc326057 …
・このページの「エラー情報の取得」の説明で、VBAからWindowsAPIを呼出した際のエラーコードの取得
方法が書かれています。
・VBAからWindowsAPIのDLLを呼び出した際のエラー情報は、「GetLastError関数」では取得できない
可能性があるので、VBAの場合は「Errオブジェクト」の「LastDLLErrorプロパティ」でエラーコードを取得
すれば良いようです。
・今回の場合は、COMポートオープン時のエラーコード取得に、この方法が利用できると思います。
No.1
- 回答日時:
Win32_SerialPort 等々
http://www.anchorsystems.jp/anchor/ashp/netmon/s …
VBSですがVBAで使うのに参考にならないかな?と思い提示しました。
が詳しくはないので的はずれならスル~して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 windows11のUSB接続の機器がcomポートに表示されない。 3 2023/04/13 07:51
- ドライブ・ストレージ ネットワークHDD(NAS)について教えて下さい。 11 2023/03/08 11:15
- マウス・キーボード Pc切替器が動作しません。理教えてください。よろしくお願いします。 4 2023/05/10 15:43
- ルーター・ネットワーク機器 YAMAHA RTX1210について初歩的な質問 1 2022/05/26 23:06
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- LANケーブル・USBケーブル USB TYPE-Cのハブについて 2 2022/12/30 15:05
- ビデオカード・サウンドカード PCに接続したイヤフォンのマイクが使えません。 3 2022/10/22 11:07
- その他(パソコン・周辺機器) thunderbolt3ポートについて 2 2023/07/12 18:02
- デスクトップパソコン デスクトップPCの具合いが悪い ヤフオクで富士通FMVD16010Z Window11を購入したので 9 2023/08/13 16:34
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAで、PnPでCOMポート番号取得
Visual Basic(VBA)
-
VBAを使用して、USBでつないだ機器の制御が出来るでしょうか?
Access(アクセス)
-
COM接続デバイスのポート番号特定方法について
Visual Basic(VBA)
-
-
4
VBA & easycomm で長時間測定の問題
その他(Microsoft Office)
-
5
VBA EasyCommでの送信
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
シリアル通信と文字列送信
その他(コンピューター・テクノロジー)
-
8
エクセルVBAでのネットワークプリンタのポー名の取得方法は?
Visual Basic(VBA)
-
9
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
10
シリアル通信時のデータ受信方法
Visual Basic(VBA)
-
11
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
12
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
14
TextBoxの最下行を表示しておきたい
Visual Basic(VBA)
-
15
エプソンVP-930のESC/Pの操作について
Visual Basic(VBA)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
18
Tx Rx の『x』の意味は何ですか?
ビデオカード・サウンドカード
-
19
プログラムでUSB機器が接続された事を認識するにはどうしたら良いのでしょうか?
Visual Basic(VBA)
-
20
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wsdlからのサービス化を行い。
-
USB通信について
-
read()メソッドを使ったループ...
-
クライアントサーバ型アプリ製...
-
c# ソケット非同期通信プログラム
-
オセロゲームのオンラインゲーム
-
UDPを使って帯域測定プログラム...
-
C++BuilderでHTTP通信する方法...
-
Visual BASIC Express 2015 を...
-
Javaの通信系クラスを利用した...
-
ソケットにおけるメッセージの...
-
UDPを使って通信速度測定プログ...
-
WINSOCKのWSACleanupについて
-
C#で簡単なサービスアプリを書...
-
winsockを使った通信での同時接...
-
エクセル VBA でのCOMポート...
-
UDP通信する時に、相手にどうや...
-
SIPがNATを越えられない理由
-
Javaのソケット通信について初...
-
VB6でネットワーク通信ソフトを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットでクライアントのipア...
-
ソケットを用いた1対多通信につ...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
相手のIPアドレスを取得する方法
-
recv関数でフリーズしてしまう
-
closeされたsocketへの動作につ...
-
送信したデータの一部が文字化...
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
Connectエラーが出てしまう・・...
-
WinSockでの通信プログラムがう...
おすすめ情報