深入探讨Excel Application对象OnTime方法的死穴

来源 :中国科技博览 | 被引量 : 0次 | 上传用户:dsgver5r33
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘 要]因为Excel集数据库和程序设计于一体,令广大VBA编程爱好者前赴后继地奔走在Excel考试系统路上,定时器作为考试系统的基本要求,而Excel却没有Timer,使爱好者乱了方寸,幸好Application对象OnTime方法带来了一线生机,但它又无法感知系统时间被修改的弊端,成了Excel考试系统的死穴,又让爱好者垂头丧气。
  [关键词]探讨 Excel Application对象 OnTime方法
  中图分类号:TP311.52 文献标识码:A 文章编号:1009-914X(2016)02-0351-01
  Excel考试系统的重点和难点都是定时器的实现,但定时器作为任何考试系统的基本要求,又无法回避,怎样彻底实现Excel考试系统的定时器功能呢?
  一、实现定时器的基本方法
  虽然Excel VBA没有提供定时器,但可以通过Application对象的OnTime方法实现简单的定时器功能,OnTime方法能够安排一个过程在将来的特定时间运行,既可以是具体指定的某个时间,也可以是指定的一段时间之后。
  语法如下:Application.OnTime EarliestTime,Procedure,LatestTime,Schedule
  在OnTime方法中递归调用Procedure过程,就可实现定时器。
  二、致命的死穴
  尽管OnTime方法可以具体指定的某个时间和指定的一段时间之后两种方式执行Procedure,但本质上都是具体指定的某个时间,因此一旦修改系统时间,不管是提前或延后时间,让其错过指定时刻,或让指定时刻延后数小时或更长,导致OnTime方法失效,从而失去定时器的功能,成为Excel考试系统的死穴。
  三、解决方案
  许多编程爱好者都在苦苦探索一旦修改系统时间,立刻让Excel感知系统时间被修改了,从而调整定时器方案,其中想利用类似lostfocus和getfocus事件的Workbook_Activate()、Workbook_SheetActivate()、Workbook_WindowActivate()等事件的探索者,均以失败而告终,因为WindowActivate等事件都是在有两个以上workbook打开时(也就是多个excel文件),互相之间切换起作用,而不是workbook和其他程序窗口间切换。同理,WindowDeactivate也得是在多个workbook时起作用。
  经过多次探索,终于发现Worksheet_Change()或Workbook_SheetChange()可担当此大任,两个事件都在编辑单元格后触发事件,类似TextChange事件,因为一般而言,Excel随时随地都处于编辑状态,所以时时刻刻都会触发Worksheet_Change()或Workbook_SheetChange()事件,只要在事件中获取系统时间,并比较前后时间的变化,即可判断系统时间是否被修改。尤其是系统时间被修改为以前的时间,更容易感知,因为时间毕竟不能倒流。
  四、具体实现方法
  首先定义两个全局变量Public pass As Date,Public nowtime As Date,在Workbook_Open()事件中获取系统时间,启动定时器过程displaytime()。
  Private Sub Workbook_Open()
  nowtime = Now()
  pass = nowtime - TimeValue("01:00:00") '防恶意修改系统时间
  displaytime
  End Sub
  而在定时器中递归调用过程displaytime()。
  Public Sub displaytime()
  nexttime = Now + TimeValue("00:00:01")
  If Range("D2").Value > TimeValue("00:00:00") Then
  Application.OnTime nexttime, "ThisWorkbook.displaytime", , True
  End If
  End Sub
  在Worksheet_Change()或Workbook_SheetChange()事件中利用DateDiff函数比较pass和nowtime两个变量,当nowtime比pass还早,说明修改了系统时间,提示并作关闭Excel处理。
  Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  nowtime = Now()
  If DateDiff("s", pass, nowtime) < 0 Then '修改系统时间,按提交处理
  Response = MsgBox(" 恶意修改系统时间 ", 0, "提示")
  ActiveWorkbook.Save
  Application.Quit
  Else
  pass = nowtime '正常,时间在一分一秒过去
  End If
  End Sub
  五、定时器在考试系统中的注意事项
  在考试系统中,发现修改系统时间进行异常处理时,一般都要在Workbook_SheetChange()中记录考试状态和退出考试的原因,并存放在Excel文档中,此时又会触发Workbook_SheetChange()形成递归调用,而又没有递归的退出机制,导致堆栈空间溢出,Excel出现1004号错误,使整个考试系统崩溃,那么又怎样避免Workbook_SheetChange()形成递归调用呢?可在事件处理中使用Application.EnableEvents=False禁止触发事件,而处理完成后Application.EnableEvents=True重新启动触发事件。
  至此,Excel考试系统的重点和难点——定时器的实现方法探讨完毕,整个考试系统彻底健壮起来了,真正完成了Excel考试系统的开发工作。
  参考文献
  [1] 张志群,EXCEL单元格自定义数字格式探讨,微型电脑应用,2008,24
  [2] 甘伟明,用Excel构建计算机等级考试自动改卷评分系统,电脑学习 2010,2
其他文献
[摘 要]中性点采用小电流接地方式是配电网的一种主要接地方式。这种接地方式能提高系统的供电可靠性,然而,这种接地方式有一个一直以来都难以解决的问题:当系统发生单相接地故障时,故障线路的确定非常困难.本论文针对这个问题开展研究工作,旨在发现现有选线方式存在的不足,进一步探索选线方法,改进选线策略。  [关键词]小电流接地系统 故障选线方法  中图分类号:F426.61 文献标识码:A 文章编号:10
期刊
[摘 要]水平井由于增大了油气层的裸露面积,因而在薄的油气层或裂缝性油气藏中有很好的应用。在水平井中侧向测井的电流方向垂直于相邻泥岩层,故需研究适用于水平井的电阻率模型。本文首先利用串联导电理论,建立了分散泥质砂岩与相邻泥岩之间的导电方程,然后基于有效介质对称导电理论和电导率差分方程,考虑泥质附加导电、水导电,建立泥质砂岩有效介质对称电阻率模型。再其次,对模型中各参数对电阻率模型的影响进行了分析,
期刊
[摘 要]南方电网各级机构经过多年资源管理建设,形成了覆盖网、省、地三级的资源规模。本文针对各级通信资源管理系统独立建设、各自为阵的现状,提出了基于云计算技术的统一资源管理方案,着眼于全网资源的集中展示和统一调配,解决了数据分散造成的信息孤岛,从而提高全网资源管理水平。  [关键词]统一资源管理;属地化管理;三维权限;集中展示及统一调配;云计算  中图分类号:TM73 文献标识码:A 文章编号:1
期刊
[摘 要]水文地质勘测工作为工程项目的设计和国民经济发展规划的制定,提供了水文地质资料。水文地质勘测是一项以水文地质基本理论作为为指导思想的工程,研究水文地质的调查方法和理论。水文地质勘测的优化,有利于称勘察质量的提升,确保工程能够稳定进行。为了促进工程勘察的稳定运行,我们要切实的做好水文地质勘测工作,为有效解决水文地质问题提供了理论基础。  [关键词]水文地质 勘测 评价内容 问题  中图分类号
期刊
[摘 要]新疆水资源短缺,农业用水耗费巨大,因此发展节水灌溉是新疆实现水资源可持续利用、支撑国民经济可持续利用发展的有效措施。新疆目前农业节水灌溉发展取得了较多的成绩,但是节水灌溉面临的形势依然非常严峻,由于政府对节水灌溉设施建设的支持力度不够等原因,影响了节水灌溉设施的推广建设。本文分析了新疆节水灌溉的发展现状及存在的主要问题,并提出了一些节水技术措施,以供参考。  [关键词]新疆干旱区 水资源
期刊
[摘 要]十八大以后,在以习近平总书记为核心的新一代领导集体,不断优化作风建设,全面从严治党。在新形势下,习近平总书记强有力的提出,各级领导干部要注重三严三实专题教育,努力践行三严三实,做到严以修身、严以用权和严以律己,务求谋事要实、创业要实、做人要实。作为党员干部,必须要真抓实干,以三严三实为准绳,不断反省自己,提高自身思想境界和素质能力,查找自身问题,做到党员干部为人民群众服务的职责。本文主要
期刊
[摘 要]本文在介绍智慧型校园的特征和作用的基础上,阐述了物联网在构建智慧型校园中的重要应用。  中图分类号:TP391.44;TN929.5 文献标识码:A 文章编号:1009-914X(2016)02-0332-01  引言  随着信息技术的快速发展,全国各高校的信息化建设水平也在不断地提高,根据利用信息化手段提升高校的教学、科研、管理等方面水平的实际需要,提出了构建智慧型校园的理念。所谓“智
期刊
[摘 要]随着社会的不断发展,信息时代的到来,网络技术在人们的生活中越来越被广泛的加以利用,给人们带来很大的方便。随着经济和社会的不断发展,关于互联网的研究也越来越成熟,但相比之下,人们对物联网的认识还不够充分,加之市场还未充分接纳这一新兴的事物,所以对物联网进行研究是很有必要的。本文就是对电子商务和物流网的发展进行的分析研究。  [关键词]电子商务 物流网 发展  中图分类号:F49 文献标识码
期刊
[摘 要]在物流企业经营管理中,商贸物流园区的合理规划十分重要。商贸物流园区的合理规划能够有效提高入驻物流企业经营的规模效益,它规划的合理与否对城市的总体规划也有一定的影响。因此,本文通过阐述商贸物流园区规划的主要表现,探讨了现代化商贸物流园区规划的几点重要策略。  [关键词]商贸物流园区 规划 选址 布局  中图分类号:F253.9 文献标识码:A 文章编号:1009-914X(2016)02-
期刊
[摘 要]由于前置型抽油机缺少悬点失载保护装置,一旦发生悬点失载,横梁连杆机构瞬间承受巨大载荷,从而导致横梁轴承座拉裂或连杆螺栓拉断,横梁连杆结构断脱,引发一系列的事故,并有可能造成人身伤害。为了避免类似事故的出现,有必要采取加大横梁轴承座、连杆、曲柄等部件的设计安全系数、加强安全监控和增加失载保护装置等各种有效措施,防止造成设备损害和人员伤亡事故。本文对前置型抽油机出现悬点失载的原因进行了分析,
期刊