读书人

vba 串口设置有关问题

发布时间: 2012-01-11 22:28:46 作者: rapoo

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 

读书人网 >VB

热点推荐