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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
EXCEL VBAで、PnPでCOMポート番号取得
Visual Basic(VBA)
-
VBAを使用して、USBでつないだ機器の制御が出来るでしょうか?
Access(アクセス)
-
シリアル通信時のデータ受信方法
Visual Basic(VBA)
-
-
4
COM接続デバイスのポート番号特定方法について
Visual Basic(VBA)
-
5
CreateFile関数でCOMポートが開けない
C言語・C++・C#
-
6
エクセルVBAでRS232Cへ
Visual Basic(VBA)
-
7
RS232Cを経由してEXCELにデータを取込みたい
Visual Basic(VBA)
-
8
VBA EasyCommでの送信
Visual Basic(VBA)
-
9
Windows10におけるUSB-RS232C機器との接続について
ドライブ・ストレージ
-
10
エクセルVBAでRS232通信は可能ですか?
PowerPoint(パワーポイント)
-
11
VBでUSB制御プログラム作成する方法
Visual Basic(VBA)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
WriteFileの引数について
Mac OS
-
14
プログラムでUSB機器が接続された事を認識するにはどうしたら良いのでしょうか?
Visual Basic(VBA)
-
15
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
16
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
17
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
18
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
19
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
20
GPIB制御
その他(ソフトウェア)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソケット通信の送受信遅延-02 ...
-
ソケットのrecvの戻り値が0
-
H8のポートの状態
-
winsockでファイル転送
-
ソケットでクライアントのipア...
-
同じLAN内パソコンのIPアドレス...
-
VB2008にてRS232C通信をするソ...
-
Linuxでsocket接続をしているの...
-
TCP/IP通信時のサーバーからの受信
-
Connectエラーが出てしまう・・...
-
UDPの宛先ポートと送信元ポート...
-
VB6‥ソケットについて
-
Macターミナルで実行中のプログ...
-
ショッピング
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
C言語で、メモリを解放しないで...
-
MACで動く実行ファイルをWindow...
-
家電製品の電力周波数を変える機械
-
Excel-VBAのmsgBox()の不思議
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
ソケットのクローズについて
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
WinSockでの通信プログラムがう...
-
同じLAN内パソコンのIPアドレス...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
VB6‥ソケットについて
-
SIPがNATを越えられない理由
おすすめ情報