我想判断当前口是否可用的时候,如果当前口被打开占用后,发现用For循环的时候,不论i如何增加,实际上.CommPort = i始终是固定为当前已经占用打开的串口上,不管之后的串口是否真实存在.比如说是串口2被占用打开了,那么继续从i=3开始的判断.CommPort都是固定在2口上,Err.Number也始终是8005,非要先关闭串口2之后再循环不存在的串口才会报8002
    如果是这样的话,当其它程序使用了串口后我还想判断可以使用的串口怎么才能避免这种情况?先管点其它程序的所使用的串口号似乎不太合适. With MSComm1
    On Error Resume Next
    If 通信端口 = 0 Then
        For i = 1 To 8
          'i = 1
          .CommPort = i
          .PortOpen = True
          If Err.Number = 0 Then
             读取 = "DD2C"
             Call 转换.校检(读取)
             buf(0) = &HAA
             buf(1) = &HD1
             buf(2) = &H22
             buf(3) = Val("&h" & 校检1)
             buf(4) = Val("&h" & 校检2)
             buf(5) = &HBB
             MSComm1.Output = buf
          End If
          If Err.Number = 0  Then MSComm1.PortOpen = False
       Next
  End With

解决方案 »

  1.   

    判断串口打开与否应该这样判断
    if mscomm1.portopen then 
       '端口打开的
    else
       '端口未打开
    endif
      

  2.   

    上面的只能知道串口是否被打开,但不知道串口是否存在,非要执行mscomm1.portopen=True那么它不会判断串口是否存在,而我这个USB转串口在程序启动后再插上去,调试的时候那么就成了8002找不到串口存在,到下一个串口检测的时候它就成了8005,串口是被打开了的,并且串口固定到了上一个串口好不再更改了.又是怪了.
      

  3.   

    还有个问题就是,比如说我大USB串口为4,当我开始检测4口还没有执行mscomm1.portopen=True这句,调试时查看mscomm1.portopen确定为False,但我再用串口调试工具查看4口确是被打开了的,为什么呢?
      

  4.   

    同时请问是不是一个事件里面只能有一个On Error?我怎么使用两个的话也只能一个起作用,到下一个错误发生的时候还是会给出程序错误.