使用SetTimer和KillTimer设计计时器
liebian365 2024-11-26 05:55 5 浏览 0 评论
【分享成果,随喜正能量】 你拥有青春的时候,就要感受它。不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知、平庸和低俗。。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是”专题十一:VBA如何做到延时获得数据信息”:使用SetTimer和KillTimer设计计时器
第四节 延时获取数据取得类似计时器功能
大家好,我们继续延时获取数据的专题讲解,这节内容将给大家讲解一个API函数用于取得类似一个计时器的界面效果。
1 使用SetTimer设置触发事件时间和使用KillTimer设置暂停
SetTimer和KillTimer是两个windows的API函数,利用这两个函数可以设置事件的触发和停止触发。
SetTimer是一种API函数,位于user32.dll中。可以利用这个函数每隔一段时间执行一件事。使用方法比较简单,通常告诉Windows一个时间间隔,然后Windows以此时间间隔周期性触发程序。可以调用对应的KillTimer函数销毁指定的时钟。
我在上讲的讲解中提到,如果是64位office系统,我们在引用的时候要小心些,我在这套教程中给出的程序还无法实现64位系统的调试,这里我给出这个两个API函数的两种引用:
#If VBA7 Then
Public Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongPtr, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Public Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
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
#End If
需要大家注意的是参数较多,但不可少。这种引用建立后,VBA中将使用Windows的SetTimer和KillTimer函数。SetTimer指示Windows每隔NumberOfSeconds*1000毫秒执行一个指定过程,直到调用KillTimer。在此期间,应用程序是正常执行的,并且事件正常发生。
2 使用SetTimer和KillTimer设计计时器的代码设计
下面我们看一下利用这两个函数实现计时器的代码:
#If VBA7 Then
Public Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongPtr, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Public Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Public TimerID As LongPtr
#Else
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 TimerID As Long
#End If
Public TimerSeconds As Single
Sub mynzD()
Sheets("sheet4").Select
Sheets("sheet4").Shapes(1).Visible = False
TimerSeconds = 1 ' how often to "pop" the timer.
TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)
End Sub
Sub mynzE()
On Error Resume Next
KillTimer 0&, TimerID
Sheets("sheet4").Shapes(1).Visible = True
End Sub
Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _
ByVal nIDEvent As Long, ByVal dwTimer As Long)
' This procedure is called by Windows. Put your code here.
Cells(1, 2) = Cells(1, 2) + 1
End Sub
Sub mynzF()
Cells(1, 2) = 0
End Sub
代码截图:
代码讲解:
1)#If VBA7 Then
Public Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongPtr, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Public Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Public TimerID As LongPtr
#Else
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 TimerID As Long
#End If
以上代码是对API函数的引用和公用变量的声明。注意在应用程序中我仅给出了32位系统的代码,以及64位OFFICE代码。
2)Sheets("sheet4").Shapes(1).Visible = False
以上代码是对开始按钮的设置,避免了多重点击出现的重复计时。这也是对于我第一套教程《VBA代码解决方案》中有关ON TIME知识点讲解的完善,大家可以对照这个知识点和这讲的代码比较一下,加上上面的按钮设计后会更好些。
3)TimerSeconds = 1 ' how often to "pop" the timer.
TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOfTimerProc)
以上给出触发事件的时间为1秒,触发的是TimerProc。
4)Sub TimerProc(ByValHWnd As Long, ByValuMsg As Long, _
ByValnIDEvent As Long, ByValdwTimer As Long)
' This procedure is called by Windows. Put your code here.
Cells(1, 2) = Cells(1, 2) + 1
End Sub
对于这个过程,其实就是一个计时累加的过程。
5)KillTimer 0&, TimerID
Sheets("sheet4").Shapes(1).Visible = True
上述代码实现计时器的退出和按钮的重置。
3 使用SetTimer和KillTimer计时器的实现效果
我们点击开始按钮:
这个时候计时开始,同时开始按钮消失:
当我们按下停止时开始按钮才会重新出现:
好了,这样就实现了计时器的功能,也就是说实现了获取延时数据。
本节知识点回向:
- SetTimer和KillTimer的意义是什么?
② 本节的讲解对开始按钮进行了设计,原因是什么?大家可以试试如果不进行这样的设计,有何不妥。
本节代码参考文件“011工作表.xlsm”
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
【分享成果,随喜正能量】据说每个人需要一面镜子,可以常常自照,知道自己是个什么东西。不过,能自知的人根本不用照镜子;不自知的东西,照了镜子也没有用。 。
相关推荐
- 快递查询教程,批量查询物流,一键管理快递
-
作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...
- 一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递
-
对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...
- 快递查询单号查询,怎么查物流到哪了
-
输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...
- 3分钟查询物流,教你一键批量查询全部物流信息
-
很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...
- 快递单号查询,一次性查询全部物流信息
-
现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...
- 快递查询工具,批量查询多个快递快递单号的物流状态、签收时间
-
最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...
- 快递查询软件,自动识别查询快递单号查询方法
-
当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...
- 教你怎样查询快递查询单号并保存物流信息
-
商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...
- 简单几步骤查询所有快递物流信息
-
在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...
- 物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号
-
最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...
- 连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息
-
快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...
- 快递查询教程,快递单号查询,筛选更新量为1的单号
-
最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...
- 掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析
-
在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...
- 从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息
-
在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...
- 物流单号查询,在哪里查询快递
-
如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)