今天在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
部分代码如下: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
Case 2
strData = strData & sheet1.MSComm1.Input
intlen = Len(strData)
Worksheets(SHEET1_NAME).Range(KG_VALUE).Value = LTrim(strData)对Excel对象的操作是比较慢的,导致后面的数据接不上。
LZ你试试先保存在内存中,全部收完再写入。