COMポートリストを取得する | VBA

指定した番号のCOMポートが存在するかを確認し、存在しなければCOMポート番号のリストを表示するというサンプルコードです。デバイスマネージャーを見れば分かるんだけど起動するの面倒だし、というときに使えるかもしれません。

'*******************************************************************************
' COMポート処理
'*******************************************************************************

'*******************************************************************************
' COMポートの確認
'  input  : number  = COMポート番号 [1 - 256]
'  return : 0=OK / 1=NG
'  note   :
'*******************************************************************************
Function Check_ComPort(number As Integer) As Integer

    Dim i As Integer
    Dim cnt As Integer
    Dim result As Integer
    Dim List As Variant
    Dim Port As String
    Dim Message As String

    'COMポートリストの取得
    cnt = Get_ComPortList(List)
    If cnt = 0 Then
        MsgBox "このパソコンにはCOMポートがありません。"
        Check_ComPort = 1
        Exit Function
    End If

    result = 1
    Message = ""
    Port = "COM" & Format(number, "0")
    For i = 0 To cnt - 1
        If Port = List(i) Then
            result = 0
            Exit For
        End If

        If Message <> "" Then
            Message = Message & " , "
        End If
        Message = Message & List(i)
    Next

    If result <> 0 Then
        MsgBox "指定したCOMポートはありません。" & vbCrLf & _
               "下記の中から選択してください。" & vbCrLf & vbCrLf & _
               "    " & Message
    End If

    Check_ComPort = result

End Function


'*******************************************************************************
' COMポートリストの取得
'  input  : List    = [out] COMポート番号 (COMxxx)
'  return : COMポート数
'  note   :
'*******************************************************************************
Function Get_ComPortList(List As Variant) As Integer

    Dim Serial        As Object
    Dim SerialSet     As Object
    Dim objWMIService As Object
    Dim strComputer   As String
    Dim tmp As String

    Dim RegExp As Object
    Dim matches

    Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Pattern = "COM[0-9]+"

    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%)')")

    'COMポート番号の取得
    tmp = ""
    For Each Serial In SerialSet
        If tmp <> "" Then
            tmp = tmp & ","
        End If

        Set matches = RegExp.Execute(Serial.Name)

        tmp = tmp + matches(0).Value
    Next

    List = Split(tmp, ",")

    Get_ComPortList = SerialSet.count

End Function

コメント

コメントする

CAPTCHA


目次