原来我的串口程序出了问题,
后来在高手指教下改正过来为每次在退出程序的时候都会先关闭串口再退出。
可是后来操作的时候有一次忘记关闭串口就退出了,下次再打开就提示错误,串口已打开。然后就算我换了其他串口也不行。不知道怎么了。代码如下:
Private Sub Form_Load()
MsgBox MSComm1.PortOpen
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
Command2_Click
End SubPrivate Sub Command2_Click()
On Error GoTo errhandler
With MSComm1
.CommPort = 3
.Settings = "19200,N,8,2"
If .PortOpen = False Then
.PortOpen = True
End If
End With
MsgBox MSComm1.PortOpen
'Exit Sub
errhandler:
If Err > 0 Then MsgBox "串口已打开"
MsgBox MSComm1.PortOpen
End SubPublic Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False  '退出时关掉端口
End SubPrivate Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim buffer As Variant
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
Case Else
End Select
End Sub再麻烦高手帮我看看,谢谢

解决方案 »

  1.   

    原来我的串口程序出了问题, 
    后来在高手指教下改正过来为每次在退出程序的时候都会先关闭串口再退出。 
    可是后来操作的时候有一次忘记关闭串口就退出了,下次再打开就提示错误,串口已打开。然后就算我换了其他串口也不行。不知道怎么了。代码如下: 
    Private   Sub   Form_Load() 
    MsgBox   MSComm1.PortOpen 
    MSComm1.Settings   =   "19200,N,8,2" 
    MSComm1.OutBufferCount   =   0 
    MSComm1.InBufferCount   =   0 
    Command2_Click 
    End   Sub Private   Sub   Command2_Click() 
    On   Error   GoTo   errhandler 
    With   MSComm1 
    .CommPort   =   3 
    .Settings   =   "19200,N,8,2" 
    If   .PortOpen   =   False   Then 
    .PortOpen   =   True 
    End   If 
    End   With 
    MsgBox   MSComm1.PortOpen 
    'Exit   Sub 
    errhandler: 
    If   Err   >   0   Then   MsgBox   "串口已打开" 
    MsgBox   MSComm1.PortOpen 
    End   Sub Public   Sub   Form_Unload(Cancel   As   Integer) 
    MSComm1.PortOpen   =   False     '退出时关掉端口 
    End   Sub Private   Sub   MSComm1_OnComm() 
    Select   Case   MSComm1.CommEvent 
    Case   comEvReceive 
    Dim   buffer   As   Variant 
    MSComm1.InputLen   =   0 
    MSComm1.InputMode   =   comInputModeText 
    buffer   =   MSComm1.Input 
    'Form1.Text2.Text   =   buffer 
    Form1.List1.AddItem   buffer 
    Case   Else 
    End   Select 
    End   Sub 
      

  2.   

    Private Sub Form_Load()
        MSComm1.Settings = "19200,N,8,2"
        MSComm1.OutBufferCount = 0
        MSComm1.InBufferCount = 0
        If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
            MsgBox "串口已打开"
        Else
        End If
    End SubPublic Sub Form_Unload(Cancel As Integer)
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            MsgBox "关掉串口"
        End If
    End SubPrivate Sub MSComm1_OnComm()
        Dim buffer As Variant
        Select Case MSComm1.CommEvent
            Case comEvReceive
                MSComm1.InputLen = 0
                MSComm1.InputMode = comInputModeText
                buffer = MSComm1.Input
                'Form1.Text2.Text   =   buffer
                Form1.List1.AddItem buffer
        End Select
    End Sub
      

  3.   

    Private Sub Form_Load()
        MSComm1.CommPort = 3
        MSComm1.Settings = "19200,N,8,2"
        MSComm1.OutBufferCount = 0
        MSComm1.InBufferCount = 0
        If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
            MsgBox "串口已打开"
        Else
        End If
    End SubPublic Sub Form_Unload(Cancel As Integer)
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            MsgBox "关掉串口"
        End If
    End SubPrivate Sub MSComm1_OnComm()
        Dim buffer As Variant
        Select Case MSComm1.CommEvent
            Case comEvReceive
                MSComm1.InputLen = 0
                MSComm1.InputMode = comInputModeText
                buffer = MSComm1.Input
                'Form1.Text2.Text   =   buffer
                Form1.List1.AddItem buffer
        End Select
    End Sub
      

  4.   

    LZ:你发表于:2008-01-21 10:05:13“关于用MSCOMM控件编写串口程序的问题,万分火急,在线等待!”
    是用2个form,原给出代码考虑有MSComm控件窗体仅加载到内存,不作显示的。
    实际上尽量少用MsgBox函数,特别是在接收代码中,它会干扰正常接收。
    结合在那个贴的答复和本贴答复:'Form1的代码:
    Option ExplicitPrivate Sub Command1_Click()
        Form2.MSComm1.Output = "aaa"
    End SubPrivate Sub Form_load()
        Load Form2
    End Sub'Form2的代码:
    Private Sub Form_Load()
        MSComm1.CommPort = 3
        MSComm1.Settings = "19200,N,8,2"
        MSComm1.OutBufferCount = 0
        MSComm1.InBufferCount = 0
        If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
            MsgBox "串口已打开"
        Else
        End If
    End SubPublic Sub Form_Unload(Cancel As Integer)
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            MsgBox "关闭会串口"
        End If
    End SubPrivate Sub MSComm1_OnComm()
        Dim buffer As Variant
        Select Case MSComm1.CommEvent
            Case comEvReceive
                MSComm1.InputLen = 0
                MSComm1.InputMode = comInputModeText
                buffer = MSComm1.Input
                'Form1.Text2.Text   =   buffer
                Form1.List1.AddItem buffer
        End Select
    End Sub
      

  5.   


    'Form1的代码:
    Option ExplicitPrivate Sub Command1_Click()
        Form2.MSComm1.Output = "aaa"
    End SubPrivate Sub Form_load()
        Load Form2
    End Sub'Form2的代码
    Private Sub Form_Load()
        MSComm1.CommPort = 3
        MSComm1.RThreshold = 1
        MSComm1.Settings = "19200,N,8,2"
        MSComm1.OutBufferCount = 0
        MSComm1.InBufferCount = 0
        If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
            MsgBox "串口已打开"
        Else
        End If
    End SubPublic Sub Form_Unload(Cancel As Integer)
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            MsgBox "关闭会串口"
        End If
    End SubPrivate Sub MSComm1_OnComm()
        Dim buffer As Variant
        Select Case MSComm1.CommEvent
            Case comEvReceive
                MSComm1.InputLen = 0
                MSComm1.InputMode = comInputModeText
                buffer = MSComm1.Input
                'Form1.Text2.Text   =   buffer
                Form1.List1.AddItem buffer
        End Select
    End Sub
      

  6.   

    http://zhidao.baidu.com/question/44313446.html
      

  7.   

    引用baidu中的评语:
    提问者对于答案的评价:
    呵呵,看了很多你很多别的回答,看来你是专门解答串口问题的,还是要给你分的
    你太强了,谢谢哈