小弟初学VBA,想利用mscomm32.ocx 64位 SP6在EXCEL中实现串口通讯,求初始化设置程序和发送及接受程序。不胜感激

求SerialPort使用方法_百度知道7191人阅读
用c#也可以实现这种功能,那就是用serialPort控件,这里用VBA写的,用MSComm控件实现。其实还有另外一个控件叫NETComm控件,也可以做,源码中注释很清楚,不再赘述
Private Sub btn_Close_Click()
MSComm1.PortOpen = False '打开串口
btn_Start.Enabled = True '连接按钮响应
btn_Close.Enabled = False '断开按钮变灰
Private Sub btn_exit_Click()
If MSComm1.PortOpen = True Then '如果串口被打开
MSComm1.PortOpen = False '关闭按钮
Unload UserForm1 '关闭窗体
Private Sub btn_Start_Click()
iniMSComm '对串口控件设置
MSComm1.PortOpen = True
btn_Close.Enabled = True
btn_Start.Enabled = False
Private Sub iniMSComm() '对串口控件设置
mPort = 1 '占用的串口号,1表示COM1
MSComm1.Settings = "115200,n,8,1" '这个自己根据自己的情况设置
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
'MSComm1.PortOpen = True'这句话放到连接按钮事件中去
MSComm1.InputMode = comInputModeText
MSComm1.RTSEnable = True
MSComm1.InBufferCount = 0
Private Sub MSComm1_OnComm() '事件处理
Dim t1 As Long, com_string As String
Static i As Integer
t1 = Timer
Select mEvent
Case comEvReceive '如果接收到数据则执行下列语句
MSComm1.RThreshold = 0
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 '写到Excel中去
txtRec.Text = txtRec.Text + com_string '写到文本框中去
End Select
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:32000次
排名:千里之外
原创:16篇
转载:29篇
(1)(2)(2)(1)(11)查看: 12002|回复: 24
在Excel中设置登录窗口-Excel VBA学习
阅读权限20
在线时间 小时
&&使用VBA编写的一下小的实用程序或小型数据库,有时为了保密或限制某些用户的权限,需要设置登录窗口,不同的用户使用不同的用户名和密码登录,获得不同的权限。 方法及过程如下:
第一步:进入VB编辑器,插入一个用户窗体,以下是我设计的一个下数据库的登录窗体:
其中, User name对应的文本框是textbox1, Password对应的文本框是textbox2。
第二步:代码编写
1.文档打开时,应实现文档隐藏,登录窗出现功能,在Thisworkbook中写入如下代码:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
<font color="#.用户窗体中的程序,以我做的一个小数据库为例,我设置了三种权限:数据库只读权限,数据库输入权限,管理员权限。
如果用户在登录窗口点击关闭按钮,则文档应该被关闭掉,所以在用户窗体中写入以下代码:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
ThisWorkbook.Close
登录窗体中验证用户名和密码是否正确的程序:
Private Sub CommandButton1_Click() ‘点击OK按钮时
If TextBox1.Text = Sheet5.Cells(2, 2).Value And TextBox2.Text = Sheet5.Cells(2, 3).Value Then
adminunhide ’管理员权限登录时,所有表格都可见
reportunhide
dataunhide
inputunhide
Application.Visible = True
For i = 1 To Sheets.Count
Sheets(i).Visible = True
ElseIf TextBox1.Text = Sheet5.Cells(3, 2).Value And TextBox2.Text = Sheet5.Cells(3, 3).Value Then
dataunhide ‘以只读权限进入时,只有数据可以读取
Application.Visible = True
For i = 1 To Sheets.Count
Sheets(i).Visible = True
Sheet1.Protect Password:=123, DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheet3.Protect Password:=123, DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
Sheet3.EnableSelection = xlNoRestrictions
ElseIf TextBox1.Text = Sheet5.Cells(4, 2).Value And TextBox2.Text = Sheet5.Cells(4, 3).Value Then
dataunhide ’以数据输入者权限进入时,只能使用输入界面和数据存储表
inputunhide
Application.Visible = True
For i = 1 To Sheets.Count
Sheets(i).Visible = True
Sheet1.Protect Password:=123, DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheet3.Unprotect Password:=123
Else ‘输入的用户名或密码错误时
MsgBox &User name or password error,access denied.&
TextBox2.Text = &&
TextBox2.SetFocus
UserForm1.Hide
说明:各种权限的用户名和密码存储在Excel的一张表中,这张表只有以管理员权限登录时才能被看见。程序登录时会比较输入的用户名密码和表中存储的用户名密码是否一致。
阅读权限100
在线时间 小时
本帖最后由 liucqa 于
23:30 编辑
支持一下,虽然设置权限对老手来说没什么用,但办公用还是可以的
阅读权限10
在线时间 小时
谢谢分享,学习了。
阅读权限20
在线时间 小时
{:soso_e100:}
有没有附件,上传一下看看效果
阅读权限50
在线时间 小时
请赐教:管理员设置用户账号权限怎么写?不胜感激
阅读权限20
在线时间 小时
学习了,& & 最好是有附件上传
阅读权限20
在线时间 小时
能否上传附件,先谢谢了,
阅读权限20
在线时间 小时
一直在找这个,太感谢了。
阅读权限10
在线时间 小时
是否能上传一个附件,谢谢!
阅读权限10
在线时间 小时
版主,学习了,有没有附件上传啊?
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师登&#12288;录
当前页面:&&&&&VBA的妙用:串口通讯程序与EXCEL相结合
VBA的妙用:串口通讯程序与EXCEL相结合
人气:2922
摘要:Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用
  Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。
2 串口通讯程序
  简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。
  上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:
1) 轮询式
  上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。
  优点:速度快、误码率低(几乎不存在误码)。
  缺点:消耗CPU。(解决办法:使用Sleep()API函数)。
2) 消息式
  消息式通讯是采用响应WINDOWS消息的办法读取串口。
  优点:节省CPU、误码率低。
  缺点:发送接收机制过于繁琐。
3) 定时接收式
  定时接收式通讯是根据预设的定时器时间进行读取数据。
  优点:发送接收机制相对简单、节省CPU。
  缺点:误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算。
3 EXCEL-VBA串口通讯实例
  软件:EXCEL。
  硬件:艾默生EC10 PLC。
  功能:通过EXCEL中的按钮控制PLC的输出继电器Y0。
  界面:RUN(运行通讯)、STOP(停止通讯)、Y0(Y0 ON/OFF控制)。
  主程序:
  Option Explicit
  Public Declare& Sub Sleep Lib &kernel32& (ByVal dwMilliseconds As Long)
  Public Declare& Function SetTimer Lib &user32& (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Public Declare& Function KillTimer Lib &user32& (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  Public com1 As New MSCommLib.MSComm
  Public y0Stt As Boolean
  Public y0_on As Boolean
  Public tmrFlag As Boolean
  Public tmr As Long
  Sub runn()
    On Error GoTo ed
    com1.Settings = &9600,e,8,1&
    If com1.PortOpen = False Then
      com1.PortOpen = True
    End If
    tmr = SetTimer(0, 0, 500, AddressOf ontimer)
    Exit Sub
  MsgBox &串口打开错误!&
  End Sub
  Sub stopp()
    If com1.PortOpen = True Then
      com1.PortOpen = False
      KillTimer 0, tmr
    End If
  End Sub
  Public Function ontimer() 
  Dim a(7) As Byte
  Dim add As Long
  On Error GoTo ed
  If tmrFlag = False Then
    tmrFlag = True
    If y0_on = True Then
      y0_on = False
      If y0Stt = True Then
      a(0) = &H1
      a(1) = &H5
      a(2) = &H0
      a(3) = &H0
      a(4) = &HFF
      a(5) = &H0
      a(6) = &H8C
      a(7) = &H3A
      com1.Output = a
      add = 0
      Do
        DoEvents
        Sleep 10
        add = add + 1
        If add &= 100 Then
          Exit Do
        End If
      Loop Until com1.InBufferCount& &= 8
      Else
      a(0) = &H1
      a(1) = &H5
      a(2) = &H0
      a(3) = &H0
      a(4) = &H0
      a(5) = &H0
      a(6) = &HCD
      a(7) = &HCA
      com1.Output = a
      add = 0
      Do
        DoEvents
        Sleep 10
        add = add + 1
        If add &= 100 Then
          Exit Do
        End If
      Loop Until com1.InBufferCount& &= 8
      End If
    End If
  End If
  tmrFlag = False
  Exit Function
  ed: MsgBox &串口错误!&
  tmrFlag = False
  End Function
  界面程序:
  Private Sub cmd1_Click()
  y0_on = True
  y0Stt = Not y0Stt
  End Sub
  Private Sub cmdRun_Click()
  CheckBox1.Value = 1
  End Sub
  Private Sub cmdStop_Click()
  CheckBox1.Value = 0
  End Sub
  由上可见,VBA已经广泛应用于微软的应用软件当中,所以为更好的完善二次开发功能,众多的组态软件都在VBA支持上做了努力,世纪星组态软件开发语言已与VBA非常相似,相信在未来的版本中,世纪星将全面支持VBA,它的二次开发功能会迈上一个新的台阶。
更多内容请访问 北京世纪长秋科技有限公司()
手机扫描二维码分享本页
工控网APP下载安装
工控速派APP下载安装
提点建议:
,请填写评语后直接提交。
&&匿名留言
看过的用户还看过
历史浏览记录
请或可查看更多历史记录
扫描二维码关注微博
扫描二维码关注微信VB串口通信程序实例_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VB串口通信程序实例
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩33页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 mscomm32.ocx 的文章

 

随机推荐