谢谢!

解决方案 »

  1.   

    Private Sub Command1_Click()
    Dim s As String
    On Error Resume Next
    For i = 1 To 20
    With Me.MSComm1
        .CommPort = i
        .PortOpen = True
        If Err.Number = 8005 Then
         s = s & "端口" & i & Err.Description & Chr(10)
        End If
        If Err.Number = 0 Then
         s = s & "端口" & i & "可用" & Chr(10)
        End If
        .PortOpen = False
        Err.Clear
    End With
    Next i
    MsgBox s
    End Sub
    Private Sub Command2_Click()  '用于测试已打开
    With Me.MSComm2
        .CommPort = 1
        .PortOpen = True
    End With
    End Sub
      

  2.   

    这是我自己写的,看看行不:'´Ó¶Ë¿Ú1µ½128½øÐвâÊÔ,Èç¹û¿ÉÒÔ¾ÍÉèÖÃÊý×é¶ÔӦλÖÃΪTrue
    Private Sub ListCommPorts(ByRef Ports() As Boolean)
        Dim i As Integer
        Dim Flag As Boolean
        
        On Error GoTo Hell
        
        For i = 1 To 128
            Ports(i) = False
        Next
        
        '´Ó1ºÅ´®¿Ú¿ªÊ¼É¨Ãè
        For i = 0 To 128
            Flag = True
            With Me.MSComm1
                If .PortOpen Then .PortOpen = False   'Èç¹û¶Ë¿ÚÒÑ´ò¿ª£¬ÔòÏȹرÕ
                .CommPort = i + 1          'Ñ¡Ôñ´®¿Ú
                .PortOpen = True           '´ò¿ª¶Ë¿Ú
            End With
            Ports(i) = Flag            'ÉèÖÃÊÇ·ñ¼ì²â³É¹¦µÄ±ê¼Ç
        Next
            
    Hell:
        Flag = False
        Resume Next
    End Sub
      

  3.   

    '从端口1到128进行测试,如果可以就设置数组对应位置为True
    Private Sub ListCommPorts(ByRef Ports() As Boolean)
        Dim i As Integer
        Dim Flag As Boolean
        
        On Error GoTo Hell
        
        For i = 1 To 128
            Ports(i) = False
        Next
        
        '从1号串口开始扫描
        For i = 0 To 128
            Flag = True
            With Me.MSComm1
                If .PortOpen Then .PortOpen = False   '如果端口已打开,则先关闭
                .CommPort = i + 1          '选择串口
                .PortOpen = True           '打开端口
            End With
            Ports(i) = Flag            '设置是否检测成功的标记
        Next
            
    Hell:
        Flag = False
        Resume Next
    End Sub