
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAで、PnPでCOMポート番号取得
Visual Basic(VBA)
-
VBAを使用して、USBでつないだ機器の制御が出来るでしょうか?
Access(アクセス)
-
COM接続デバイスのポート番号特定方法について
Visual Basic(VBA)
-
-
4
byte型をstring型として扱うには
Visual Basic(VBA)
-
5
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
6
一つのTeratermのマクロで複数のTeratermのウィンドウを立ち上げることはできますか?
サーバー
-
7
RS232CとTCP/IP通信違いについて
工学
-
8
シリアル通信と文字列送信
その他(コンピューター・テクノロジー)
-
9
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UdpClient 送信元のIPアドレ...
-
ソケット通信 同じポート番号...
-
ソケットのrecvの戻り値が0
-
エクセル VBA でのCOMポート...
-
TCP/IPプログラミングでのselec...
-
VB6‥ソケットについて
-
ソケットプログラミングに関す...
-
ネットワークプログラミングに...
-
UDP通信におけるbind関数について
-
ソケットを用いた1対多通信につ...
-
recv関数でフリーズしてしまう
-
fsockopenのソケットが全然分か...
-
Macターミナルで実行中のプログ...
-
Excel(VBA)でSetTimer関数を使...
-
AIXでのプロセス使用メモリの最...
-
C# シリアル通信でデータ受信...
-
FOM出版の公認テキスト&問題集...
-
メッセージボックスのボタン名変更
-
powershell を使いカレントディ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
Socket通信の0バイト受信について
-
Winsockで接続待ちタイムアウト...
-
ソケットのクローズについて
-
UDP通信におけるbind関数について
-
VB6のwinsockでconnectできない
-
エクセル VBA でのCOMポート...
-
SIPがNATを越えられない理由
-
ソケットでクライアントのipア...
-
UdpClient 送信元のIPアドレ...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
TCP/IPプログラミングでのselec...
-
ソケット通信
-
ソケットのrecvの戻り値が0
-
UDP通信する時に、相手にどうや...
-
vxWorks6.4を使用してソケット...
-
SendRequestでヘッダが受信され...
-
ソケットを用いた1対多通信につ...
-
どうか、POSTでのファイル転送...
おすすめ情報