Option Explicit '添加一个按钮Command1和一个MSComm控件:mscP Private Sub Command1_Click() Dim intP As Integer On Error GoTo errSub For intP = 1 To 256 mscP.CommPort = intP mscP.PortOpen = True '这是关键语句,当执行打开不存在的串口时会发生错误,跳出循环 Debug.Print "COM" & CStr(intP) mscP.PortOpen = False Next intP errSub:
End Sub
你把这个语句放到窗体的Load中,执行一次,它就可以把所有串口列出来了。
实际用的时候,可能会是 1-16口,其它几个COM口在使用,自己选没用的来用,
'引用 MicroSoft WMI Scripting V1.2 Library For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPort") ListBox.AddItem s.DeviceID Next s 涉及到硬件的东西,用 WMI 比较好。
'引用 MicroSoft WMI Scripting V1.2 Library For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPortConfiguration") Debug.Print s.Name & IIf(s.IsBusy, " 忙", " 闲") Next s
在网上找到的代码测试可以用,谢谢楼上的各位了If MSComm.PortOpen = True Then MSComm.PortOpen = False For i = 1 To 16 On Error Resume Next '当运行发生错误时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行 MSComm.CommPort = i MSComm.PortOpen = True Select Case Err.Number Case 0 Combo1.AddItem "COM" & Trim(i) MSComm.PortOpen = False Case 8005 Combo1.AddItem "COM" & Trim(i) & " 被占用" MSComm.PortOpen = False End Select Err = 0 Next
Option Explicit
'添加一个按钮Command1和一个MSComm控件:mscP
Private Sub Command1_Click()
Dim intP As Integer
On Error GoTo errSub
For intP = 1 To 256
mscP.CommPort = intP
mscP.PortOpen = True '这是关键语句,当执行打开不存在的串口时会发生错误,跳出循环
Debug.Print "COM" & CStr(intP)
mscP.PortOpen = False
Next intP
errSub:
End Sub
'引用 MicroSoft WMI Scripting V1.2 Library
For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPort")
ListBox.AddItem s.DeviceID
Next s
涉及到硬件的东西,用 WMI 比较好。
'引用 MicroSoft WMI Scripting V1.2 Library
For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPortConfiguration")
Debug.Print s.Name & IIf(s.IsBusy, " 忙", " 闲")
Next s
for each 控件变量必须为变体或对象该怎么弄呢,我放LOAD事件里了
那就是说现在的系统内只有 COM1 和 COM2,WMI 就是调的系统库。我的机器上运行后只有 COM1。
For i = 1 To 16
On Error Resume Next
'当运行发生错误时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行
MSComm.CommPort = i
MSComm.PortOpen = True
Select Case Err.Number
Case 0
Combo1.AddItem "COM" & Trim(i)
MSComm.PortOpen = False
Case 8005
Combo1.AddItem "COM" & Trim(i) & " 被占用"
MSComm.PortOpen = False
End Select
Err = 0
Next