《一》
用VB DDE通讯!
《二》
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.复制以下代码到你的窗体里:
VB code
'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 Ca MSComm1.CommEvent
Ca 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 UrForm_Initialize()
iniMscomm
End Sub
7.双击thisWorkBook,复制以下代码到窗体里:
VB code
'VBA代码
Private Sub Workbook_Open()
UrForm1.Show 0
'UrForm1.Hide
腹泻能吃苹果吗
End Sub
8.保存文件并关闭excel,然后再打开你的文件,然后单击你窗体上的按钮看看。
9.这个程序是我为你特意做的,已经做过测试,sys2003 office2003。
10.如果excel中有数据输入,再去测试你的设置,注意com口号与波特率的设置。
《三》
mark excel 串口
还有一个办法就是用任何编程,只需将收到的数据用csv文件的格式,生成一个文本文件,然后就可以用excel打开了。
这个方法适合于任何语言,只要能生成文本文件就可以了。
如果存成txt再打包可以的话,Perl简单些,不熟悉的人3天也能做出来.
Spreadsheet::WriteExcel 和Spreadsheet::ParExcel
《四》
Excel VBA串口通信
2010-01-27 16:41 1466人阅读评论(0) 收藏举报
用c#也可以实现这种功能,那就是用rialPort控件,这里用VBA写的,用MSComm控件实现。其实还有另外一个控件叫NETComm控件,也可以做,源码中注释很清楚,不再赘述
[vb:showcolumns:firstline[1]]view plaincopyprint?.........10........20........30........40........50........60........70........80........90........140. (150)
1. P rivate Sub btn_Clo_Click()
2. M SComm1.PortOpen = Fal '打开串口
3. b tn_Start.Enabled = True '连接按钮响应
4. b tn_Clo.Enabled = Fal '断开按钮变灰
5. E nd Sub
6.
7. P rivate Sub btn_exit_Click()
8. I f MSComm1.PortOpen = True Then '如果串口被打开
9. MSComm1.PortOpen = Fal '关闭按钮
10. End If
11. Unload UrForm1 '关闭窗体
12. End Sub
13.
14. Private Sub btn_Start_Click()
15. iniMSComm '对串口控件设置
16. MSComm1.PortOpen = True
17. btn_Clo.Enabled = True
18. btn_Start.Enabled = Fal
国际失踪儿童日
19. End Sub
20.
21. Private Sub iniMSComm() '对串口控件设置
22. MSComm1.CommPort = 1 '占用的串口号,1表示COM1
23. MSComm1.Settings = "115200,n,8,1" '这个自己根据自己的情况设置
24.
25. MSComm1.RThreshold = 1
26. MSComm1.InputLen = 0
27. 'MSComm1.PortOpen = True'这句话放到连接按钮事件中去
28. MSComm1.InputMode = comInputModeText
29. MSComm1.RTSEnable = True
30. MSComm1.InBufferCount = 0
31. End Sub
32.
33. Private Sub MSComm1_OnComm() '事件处理
34. Dim t1 As Long, com_string As String
35. Static i As Integer
36. t1 = Timer
37. Select Ca MSComm1.CommEvent
38. Ca comEvReceive '如果接收到数据则执行下列语句
39. MSComm1.RThreshold = 0
40. Do
41. DoEvents
迷底
42. Loop While Timer - t1 < 0.1
43. com_string = MSComm1.Input
44. MSComm1.RThreshold = 1
45. i = i + 1: If i > 255 Then i = 1
46. Application.Cells(3, i).Value = com_string '写到Excel中去
47. txtRec.Text = txtRec.Text + com_string '写到文本框中去
48. End Select
49. End Sub