今天在EXCEL表中弄了个利用串口读取电子秤数据的程序,出现了一个怪问题,我在读取数据的时候,如果单步调试的话,接收的数据是正确的,但是让它直接运行的话,数据确有丢失,麻烦哪位告诉我下这是什么原因?
部分代码如下:Option Explicit
Const SHEET1_NAME = "sheet1"
Const KG_VALUE = "D4"Private Sub MSComm1_OnComm()
Dim strData As String
Dim intlen As Integer
Dim strTemp As StringSelect Case sheet1.MSComm1.CommEvent
    Case 2
        strData = strData & sheet1.MSComm1.Input
        intlen = Len(strData)
        Worksheets(SHEET1_NAME).Range(KG_VALUE).Value = LTrim(strData)
End SelectEnd SubPrivate Sub Workbook_Open()
sheet1.MSComm1.CommPort = 1
sheet1.MSComm1.Settings = "9600,n,8,1"
sheet1.MSComm1.InputMode = comInputModeText '按文本接收
sheet1.MSComm1.InBufferCount = 0   '清空接受缓冲区
sheet1.MSComm1.OutBufferCount = 0  '清空传输缓冲区
sheet1.MSComm1.RThreshold = 1      '产生MSComm事件
sheet1.MSComm1.InBufferSize = 1024If sheet1.MSComm1.PortOpen = False Then
    sheet1.MSComm1.PortOpen = True
Else
    MsgBox "端口已經打開!", vbExclamation + vbOKOnly, "系統提示"
    ActiveWorkbook.Close
End IfEnd Sub

解决方案 »

  1.   

    我觉得问题出在这里
        Case 2
            strData = strData & sheet1.MSComm1.Input
            intlen = Len(strData)
            Worksheets(SHEET1_NAME).Range(KG_VALUE).Value = LTrim(strData)对Excel对象的操作是比较慢的,导致后面的数据接不上。
    LZ你试试先保存在内存中,全部收完再写入。
      

  2.   

    经过调试,我的问题已经解决,如chenyubo1977所说,加入延时可以解决问题。同事也非常感谢alifriend的指点,散分!哈哈……