VBA取消预设任务

分享成果 , 随喜正能量】欲多则心散,心散则志衰 , 志衰则思不达 。专注于当下,简简单单、一心一意,把这一刻的事做好,就是最大的成功 。。
《VBA经典应用69例》,是我推出的第九套教程 , 教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便大家能很好的应用 。教程的目的是要求大家在实际工作中要利用好VBA 。本套教程共三册六十九个专题,今日内容是教程的应用8:VBA取消预设任务

VBA取消预设任务

应用8 利用VBA , 完成自动运行任务的预设

这一专题 , 我们讲解利用VBA来预设某个任务自动运行 。这讲的内容在VBA中也是比较有用的,可以完成诸如动画的效果 , 以及各种自己期望的任务在某个时间自动运行 。我们主要是利用Application.OnTime来完成这种设置 。
OnTime与Application.Wait方法非常相似 , 使用这两种方法,可以设计在特定时间运行某项任务(过程) 。OnTime和Wait的一个主要区别是,对于Wait方法,Excel的操作将被挂起,但OnTime不会冻结你的计算机 。运行OnTime语句后,可以继续使用Excel工作簿 。

5 取消预设任务

我们在上面的各个例子中分别讲解了任务预设的各种应用场景,这段的内容是我们如何取消这种预设的任务 。在运行OnTime语句以创建计划任务之后,可以通过再次运行OnTime语句来取消它,该语句的值与EarliestTime和Procedure相同,但将schedule参数设置为False 。
以下声明取消了mynzB的计划任务 。
例如,我们mynzB 过程的预设如下:
Application.OnTime TimeValue("20:45:00"), "mynz_1",我们为了取消这种预设可以用下面的代码:
Sub mynzS()
Application.OnTime EarliestTime:=TimeValue("20:45:00"), Procedure:="mynz_1", Schedule:=False
End Sub
代码截图:
VBA取消预设任务

在上述mynzS取消预设设置之前 , mynzB是在开启状态的,如果没有开启,我们看下面的运行结果:
VBA取消预设任务

会提示给用户关联失败 。
如何避免这种意外出现呢?我们要设置当预设开启后,才能取消,如果没有预设是无法取消的 。我们看下的完整代码,这段代码是点击按钮mynzE后在“A1”单元格数字累加 , 点击mynzF按钮后停止 。
Sub mynzE()
myUU = True
Worksheets(1).Shapes.Range(5).Visible = False
Worksheets(1).Shapes.Range(6).Visible = True
Range("A1") = Range("A1")1
Application.OnTime NowTimeValue("00:00:01"), "mynzE"
End Sub
Sub mynzF()
If myUU = False Then Exit Sub
Application.OnTime NowTimeValue("00:00:01"), "mynzE", , False
Range("A1") = ""
Worksheets(1).Shapes.Range(6).Visible = False
【VBA取消预设任务】Worksheets(1).Shapes.Range(5).Visible = True
myUU = False
End Sub
Sub mynzG()
Set myDocument = Worksheets(1)
myDocument.Shapes.Range(Array(5, 6)).Visible = True
End Sub
代码截图:
VBA取消预设任务

代码的讲解:
1)Public myUU As Boolean 设置全局变量myUU为布尔型变量,这个默认值为false
2) myUU = True
Worksheets(1).Shapes.Range(6).Visible = True
Worksheets(1).Shapes.Range(5).Visible = False
点击这个按钮Shapes.Range(5)后,那么第6个按钮会出现,第5个按钮会隐藏 。
3)Range("A1") = Range("A1")1
Application.OnTime NowTimeValue("00:00:01"), "mynzE"
每隔1秒钟在单元格“A1”中累加1.
4)If myUU = False Then Exit Sub 如果点击第7个按钮 , 当myUU = False时,则退出 。
5)Application.OnTime NowTimeValue("00:00:01"), "mynzE", , False
Range("A1") = ""
取消mynzE的程序运行预设 。
6)Worksheets(1).Shapes.Range(6).Visible = False
Worksheets(1).Shapes.Range(5).Visible = True
第6个按钮隐藏,第5个按钮显示
7)myDocument.Shapes.Range(Array(5, 6)).Visible = True
显示工作表中的5到6所有的按钮 。
我们看下面的代码运行:
点击开始按钮mynzG:
VBA取消预设任务

点击关闭按钮mynzF:
VBA取消预设任务

恢复按钮点击mynzG:
VBA取消预设任务

总结:程序的预设运行是非常值得研究的一个课题 , 本专题深入地讲解了Application.OnTime
方法的利用,包括如何预设 , 如何取消预设,相信大家一定会有所收获 , 如果自己认为可以理解了Application.OnTime中各个参数的用法,不妨看看下面今日内容回向的问题 。
今日内容回向:
1 如何理解Application.OnTime中各个参数的意义?
2 如何取消程序的预设?
3 mynzA 做了一个下面的预设:
Sub mynzA()
Application.OnTime NowTimeValue("00:00:15"), "mynz"
End Sub
Sub mynz()
MsgBox "您点击按钮后已经过去了15秒"
End Sub
在下面的代码中貌似可以取消mynzA中的预设,是否可以呢?
Sub mynzD()
Application.OnTime EarliestTime:=NowTimeValue("00:00:15"), Procedure:="mynz", Schedule:=False
End Sub


以上代码在配套的程序文件中已经提供,请学习自己分析一下出现的结果 。
本讲内容参考程序文件:应用008.xlsm
VBA取消预设任务

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
VBA取消预设任务

VBA取消预设任务

VBA取消预设任务



分享成果 , 随喜正能量】任何人的成功,都不是一蹴而就的;所有的繁华,都需要耐得住寂寞 。。

相关经验推荐