• 締切済み

EXCEL VBAで、PnPでCOMポート番号取得

EXCELで、USB-RS232C変換アダプタをPCに繋げたとき、使用しているCOMポート番号を取得するマクロを作ろうとしています。 下記のコードのGetUseComNameプロシージャを実行してポート番号を取得できるようになりました。 わざわざGetUseComNameプロシージャを実行しなくても、USB-RS232C変換アダプタをPCに接続されたのをプラグアンドプレイで検知して、 COMポート番号を取得する仕様に改良したいのですが、どうすれば良いでしょうか。 私のパソコンの環境は(windows XP 2002 SP3 office excel2003 sp3)です。 '-------------------- Option Explicit '-------------------- Sub GetUseComName() Dim a, b, port_no As String      Range("a1").Select   Selection.Clear      '通信ポート名を取得   a = GetUseComNo()     '通信ポート名の文字列からCOMポート番号(書式「1,2,・・・」の形で)を取り出す。   Do While InStr(a, "(COM") <> 0     a = Mid(a, InStr(a, "(COM") + 4)     port_no = port_no + Left(a, 1)     If InStr(a, "(COM") <> 0 Then       port_no = port_no & ","     End If   Loop      'USB-232C変換アダプタが接続されていれば、セルa1に通信ポート番号を表示する。   If port_no = "" Then     MsgBox ("使用できるCOM Portがありません。")     Exit Sub   ElseIf InStr(port_no, ",") <> 0 Then     Selection = port_no   End If    End Sub '--------------------- Function GetUseComNo() As String   Dim Serial    As Object   Dim SerialSet   As Object   Dim objWMIService As Object   Dim strComputer  As String   Dim intCnt    As Integer  '要素数   Dim strComName  As String   '取得したデバイス名   strComputer = "."   'WMIを呼び出す   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")   'PnPで登録されているもの(デバイスマネージャで見えるもの)から   'シリアルポートのクラスでかつ名前に「(COMxx)」と付いているものを抽出   Set SerialSet = objWMIService.ExecQuery("Select * from Win32_PNPEntity Where " & _           "(ClassGuid = '{4D36E978-E325-11CE-BFC1-08002BE10318}') and " & _           "(Name like '%(COM%)')")   '全ポートの数(取得できた項目数)   intCnt = SerialSet.Count   '情報の取得   strComName = ""   For Each Serial In SerialSet     'デバイス名を取得 「"通信ポート (COM1)"」     If strComName <> "" Then       strComName = strComName & vbCrLf     End If     strComName = strComName & Serial.Name   Next   '戻り値セット   GetUseComNo = strComName End Function

みんなの回答

回答No.1

使用出来るCOMポートが発生するまで、GetUseComNoをグルグル回すしか無いと思いますが・・。 それか、COMポートを監視するWindowsの常駐アプリを作って、それをトリガーにそのVBAを起動させるとかですかね・・。 どちらも似たようなものですが。 ※ちなみに「プラグアンドプレイ」って、デバイスが接続されたらそれ用のデバイスを自動で組み込んで使えるようにしますよ。って意味なのはご存知でしょうか。(アプリケーションをキックする為の仕組みではない)

参考URL:
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A2%E3%83%B3%E3%83%89%E3%83%97%E3%83%AC%E3%82%A4
mokichi3216
質問者

お礼

ありがとうございます。 「デバイスが接続されたらアプリケーションをキックする」という仕組みはないということなのでしょうか。。。 まだ諦めがつかないので、もう少し調べてみます。

関連するQ&A