
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
VBA & easycomm で長時間測定の問題
その他(Microsoft Office)
-
5
VBA EasyCommでの送信
Visual Basic(VBA)
-
6
シリアル通信と文字列送信
その他(コンピューター・テクノロジー)
-
7
エクセルVBAでのネットワークプリンタのポー名の取得方法は?
Visual Basic(VBA)
-
8
シリアル通信時のデータ受信方法
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
プログラムでUSB機器が接続された事を認識するにはどうしたら良いのでしょうか?
Visual Basic(VBA)
-
11
16進の10進変換について
Visual Basic(VBA)
-
12
エプソンVP-930のESC/Pの操作について
Visual Basic(VBA)
-
13
byte型をstring型として扱うには
Visual Basic(VBA)
-
14
ESC/Pのテキスト印字の制御コードについて
C言語・C++・C#
-
15
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
16
PLCとPCの通信
Visual Basic(VBA)
-
17
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
18
一つのTeratermのマクロで複数のTeratermのウィンドウを立ち上げることはできますか?
サーバー
-
19
シリアル通信の方法(VB)
Visual Basic(VBA)
-
20
WriteFile()でのデータ送信ができなくなる
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル VBA でのCOMポート...
-
TCP/IP通信時のサーバーからの受信
-
socketプログラミングについて
-
空きポートの取得方法
-
ソケット通信
-
C#とTCP/IPを利用したサーバー...
-
WinSockでの通信プログラムがう...
-
UDP/IPでのソケット作成につい...
-
非ブロッキングソケットのrecv...
-
vxWorks6.4を使用してソケット...
-
Socket通信の0バイト受信について
-
UDPの接続って?
-
ソケットを用いた1対多通信につ...
-
ソケットとそれに基づくストリ...
-
ネットワークプログラミングに...
-
Winsockで接続待ちタイムアウト...
-
ソケットのrecvの戻り値が0
-
Android Socket.connectエラー
-
WINSOCKのWSACleanupについて
-
CreateFile関数でCOMポートが開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
VB6のwinsockでconnectできない
-
Socket通信の0バイト受信について
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
Connectエラーが出てしまう・・...
-
送信したデータの一部が文字化...
-
【ajax】 XMLHttpRequestオブジ...
-
ソケット通信
-
closeされたsocketへの動作につ...
-
wsdlからのサービス化を行い。
-
Cにおける通信プログラミングの...
-
UdpClient 送信元のIPアドレ...
-
非ブロッキングソケットのrecv...
-
ソケットを用いた1対多通信につ...
おすすめ情報