我自己编了一段程序,要求是从串口接收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

解决方案 »

  1.   

    既然串口通信部分代码没有问题,那么就应该是写Excel的问题了,关于怎么操作Excel,楼主可以看看这个:
    http://download.csdn.net/source/1262359
      

  2.   


    边接受边写到excel,会有问题,当缓冲区还没有全部读完,串口又会写进来...导致程序崩溃...
      

  3.   

    以下代码(对你贴出代码错误修改)测试,在TxtJieShou文本框内显示数据接收正常:
    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对数据包(帧)做规范约定.