日期:2014-05-20  浏览次数:20837 次

VSTO可以做串口通信不?信息直接发送到Excel
http://topic.csdn.net/u/20100124/10/48032a01-ef6a-44b0-bfeb-46679185c9aa.html
上面最后有点问题,听老板一说,我决定试探性的问下:VSTO可以做串口通信吗?我用serialport控件可以接受到数据,并且将这些数据显示在richtextbox上面,现在想把这些数据直接在Excel中显示,请问要怎么做呢?
------最佳解决方案--------------------
1.启动excel从:工具-->宏-->Visual Basic 编辑器,打开excel VBA.

2.在ThisWorkbook上右单击鼠标选择插入--用户窗体

3.单击一下插入的窗体,单击菜单上的--工具--附加控件--选择Microsoft Communications Control, version 6.0

4.在窗体上添加mscomm1,添加commandButton1

5.单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。

6.复制以下代码到你的窗体里:

'VBA代码
Private Sub CommandButton1_Click()
   MSComm1.Output = "BEG1END"
End Sub

Private Sub MSComm1_OnComm()
  Dim t1 As Long, com_String As String
  Static i As Integer
  t1 = Timer
  
  Select Case MSComm1.CommEvent
     Case comEvReceive '收到 RThreshold定义的字符数1字节
           MSComm1.RThreshold = 0
          Do
             DoEvents
          Loop While Timer - t1 < 0.1 '延时时间自己调整
          com_String = MSComm1.Input
          MSComm1.RThreshold = 1
          i = i + 1: If i > 255 Then i = 1
          Application.Cells(3, i).Value = com_String
       End Select
       'ActiveWorkbook.SaveAs Filename:="C:\d1.xls"
End Sub


Private Sub iniMscomm()
   'On Error Resume Next
'=====-----初始化通信串口-----=====

   MSComm1.CommPort = 1                     '使用 COM1
   MSComm1.Settings = "9600,N,8,1"          '9600 波特,无奇偶校验,8 位数据,一个停止位
   MSComm1.PortOpen = True                  '打开端口
   
   MSComm1.RThreshold = 1                   '缓冲区有1个字节就产生OnComm事件
   MSComm1.InputLen = 0                     '为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
   
   MSComm1.InputMode = comInputModeText  'Input以二进制形式取回用comInputModeBinary,以文本形式取回是(缺省项)
   MSComm1.RTSEnable = True
   MSComm1.InBufferCount = 0                '清空缓冲区
   
End Sub

Private Sub UserForm_Initialize()
    iniMscomm
End Sub



7.双击thisWorkBook,复制以下代码到窗体里: