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