vba 串口设置问题
我想实现这个功能:一开始的时候就读写入注册表的UserForm2.ComboBox1的串口值,立即打开串口;一旦串口COM值不对时,双击界面,重新改一下串口com值就行,串口也立即打开;
下面我写的程序,一开始串口COM值对时,是可以的,但改一下串口com值,再改回来就不能用了;还有一开始串口COM值不对时,重新选到对的com值也不能用,
Private Sub UserForm_Initialize()
MSComm1.Settings = "4800,N,8,1"
MSComm1.CommPort = UserForm2.ComboBox1.ListIndex + 1 '设置通讯串口
MSComm1.InputLen = 0 '设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
MSComm1.InBufferSize = 512
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End Sub
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
UserForm2.Show
End Sub
下面是UserForm2的代码
Option Explicit
Dim reg
Private Sub ComboBox1_Click()
If UserForm1.MSComm1.PortOpen = True Then
UserForm1.MSComm1.PortOpen = False
End If
UserForm1.MSComm1.CommPort = ComboBox1.ListIndex + 1
On Error GoTo Delerr
If UserForm1.MSComm1.PortOpen = False Then
UserForm1.MSComm1.PortOpen = True
End If
Set reg = CreateObject("wscript.Shell")
reg.regwrite "HKEY_CURRENT_USER\设置\ComboBox1", ComboBox1.ListIndex
Delerr:
If UserForm1.MSComm1.PortOpen = True Then
UserForm1.MSComm1.PortOpen = False
End If
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim reg
With ComboBox1
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
.AddItem "5"
.AddItem "6"
End With
Set reg = CreateObject("wscript.Shell")
ComboBox1.ListIndex = reg.regread("HKEY_CURRENT_USER\设置\ComboBox1") '读取注册表
End Sub
请高手帮忙解决啊
[解决办法]
打开一个串口用不着这么复杂:
- VB code
Option Explicit Dim a As Integer Dim openFlag As BooleanPrivate Sub cmdOpen_Click() '打开关闭端口 If openFlag Then cmdOpen.Caption = "打开串口" MSComm1.PortOpen = False '打开端口 Shape1.FillColor = vbRed Label1 = "COM" & a & " 关闭" Else OpenPortNum cmdOpen.Caption = "关闭串口" Shape1.FillColor = vbGreen Label1 = "COM" & a & " 打开" End If openFlag = Not openFlagEnd SubPrivate Sub OpenPortNum() On Error GoTo uerror For a = 1 To 16 MSComm1.CommPort = a MSComm1.PortOpen = True If MSComm1.PortOpen = True Then Exit Sub Else End If Next Exit Subuerror: Label1 = "出错或占用Com号= " & a Resume NextEnd SubPrivate Sub Form_Load() MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.RThreshold = 1 '产生MSComm事件 MSComm1.InBufferSize = 1024 Shape1.Shape = 3 Shape1.FillStyle = 0 Call cmdOpen_ClickEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub