我自己编了一段程序,要求是从串口接收2000个数然后传入EXCEL中,进行分析
下面是我写的程序,串口传输正确,向EXCEL写数,怎么就出现错误了呢?写入四个数的时候是正确的,大于四个就错了,为什么??求教高手,感激不尽!!
下面是我编的程序(不可以直接用数组向excel 单元格写数吗?)Dim xlApp As New Excel.Application '定义EXCEL类
Dim xlBook As New Excel.Workbook '定义工件簿类
Dim xlsheet As New Excel.Worksheet '定义工作表类
Dim Exldat(10, 0) As Variant
Private Sub Form_Load() '初始化端口
MSComm1.CommPort = 1
MSComm1.PortOpen = True
MSComm1.Settings = "4800,N,8,1"
MSComm1.InputLen = 0
MSComm1.RThreshold = 2
End SubPrivate Sub Command1_Click() '打开串口
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
MSComm1.InBufferCount = 0
End SubPrivate Sub Command2_Click() '退出程序
MSComm1.PortOpen = False
End
End SubPrivate Sub CmdExClose_Click()
If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL
xlBook.RunAutoMacros (xlAutoClose) '执行EXCEL关闭宏
xlBook.Close (True) '关闭EXCEL工作簿
xlApp.Quit '关闭EXCEL
End If
Set xlApp = Nothing '释放EXCEL对象
End
End SubPrivate Sub CommandExcel_Click() '打开EXCEL
Dim i As Integer
Dim n As Integer
If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
xlApp.Visible = True '设置EXCEL可见
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
xlsheet.Activate '激活工作表 xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL中的启动宏
Else
MsgBox ("EXCEL已打开")
End If For n = 1 To 6 '将数据输入单元格
xlsheet.Cells(n, 1) = Exldat(n - 1, 0)
Next n
End Sub
Private Sub MSComm1_OnComm() '串口通信 Dim Rcvdat() As Byte
' Dim Exldat(10, 0) As Variant
Dim dattemp As Variant
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim n As Integer
Select Case MSComm1.CommEvent
Case 2
dattemp = MSComm1.Input '从串口读取数据至变体变量
Rcvdat = dattemp '数据送至接收二进制数组
For i = 0 To (UBound(Rcvdat) + 1) / 2 - 1 '接收数据送至接收文本框txtRcv显示
j = i * 2
TxtJieShou.Text = TxtJieShou.Text & Right(" " & CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))),- 8) 'Texbox显示
Exldat(i, 0) = CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))) '16位数转换为十进制并由数组存储
Next i
End Select
End Sub
下面是我写的程序,串口传输正确,向EXCEL写数,怎么就出现错误了呢?写入四个数的时候是正确的,大于四个就错了,为什么??求教高手,感激不尽!!
下面是我编的程序(不可以直接用数组向excel 单元格写数吗?)Dim xlApp As New Excel.Application '定义EXCEL类
Dim xlBook As New Excel.Workbook '定义工件簿类
Dim xlsheet As New Excel.Worksheet '定义工作表类
Dim Exldat(10, 0) As Variant
Private Sub Form_Load() '初始化端口
MSComm1.CommPort = 1
MSComm1.PortOpen = True
MSComm1.Settings = "4800,N,8,1"
MSComm1.InputLen = 0
MSComm1.RThreshold = 2
End SubPrivate Sub Command1_Click() '打开串口
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
MSComm1.InBufferCount = 0
End SubPrivate Sub Command2_Click() '退出程序
MSComm1.PortOpen = False
End
End SubPrivate Sub CmdExClose_Click()
If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL
xlBook.RunAutoMacros (xlAutoClose) '执行EXCEL关闭宏
xlBook.Close (True) '关闭EXCEL工作簿
xlApp.Quit '关闭EXCEL
End If
Set xlApp = Nothing '释放EXCEL对象
End
End SubPrivate Sub CommandExcel_Click() '打开EXCEL
Dim i As Integer
Dim n As Integer
If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
xlApp.Visible = True '设置EXCEL可见
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
xlsheet.Activate '激活工作表 xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL中的启动宏
Else
MsgBox ("EXCEL已打开")
End If For n = 1 To 6 '将数据输入单元格
xlsheet.Cells(n, 1) = Exldat(n - 1, 0)
Next n
End Sub
Private Sub MSComm1_OnComm() '串口通信 Dim Rcvdat() As Byte
' Dim Exldat(10, 0) As Variant
Dim dattemp As Variant
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim n As Integer
Select Case MSComm1.CommEvent
Case 2
dattemp = MSComm1.Input '从串口读取数据至变体变量
Rcvdat = dattemp '数据送至接收二进制数组
For i = 0 To (UBound(Rcvdat) + 1) / 2 - 1 '接收数据送至接收文本框txtRcv显示
j = i * 2
TxtJieShou.Text = TxtJieShou.Text & Right(" " & CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))),- 8) 'Texbox显示
Exldat(i, 0) = CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))) '16位数转换为十进制并由数组存储
Next i
End Select
End Sub
http://download.csdn.net/source/1262359
边接受边写到excel,会有问题,当缓冲区还没有全部读完,串口又会写进来...导致程序崩溃...
Option ExplicitPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.PortOpen = True
MSComm1.Settings = "4800,N,8,1"
MSComm1.InputLen = 0
MSComm1.RThreshold = 2
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
TxtJieShou = ""
End SubPrivate Sub MSComm1_OnComm() '串口通信
Dim Rcvdat() As Byte
Dim dattemp As Variant
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim n As Integer
Select Case MSComm1.CommEvent
Case 2
dattemp = MSComm1.Input '从串口读取数据至变体变量
Rcvdat = dattemp '数据送至接收二进制数组
For i = 0 To (UBound(Rcvdat) + 1) / 2 - 1 '接收数据送至接收文本框txtRcv显示
j = i * 2
TxtJieShou.Text = TxtJieShou.Text & Right(" " & CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))), 8) 'Texbox显示
'Exldat(i, 0) = CLng("&H" & (Hex(Rcvdat(j)) & Hex(Rcvdat(j + 1)))) '16位数转换为十进制并由数组存储
Next i
End Select
End Sub建议LZ对数据包(帧)做规范约定.