excel - VBA Excel:宏应在计时器到期后启动
问题描述
我正在使用 Excel 上的 Visual Basic 应用程序。我有一个宏,它应该在一段时间后执行。我想同时用计时器跟踪等待时间。我创建了一个附加模块,其中具有以下功能:
Public Sub start_time()
Application.OnTime Now + TimeValue("00:00:01"), "next_moment"
End Sub
Public Sub end_time()
Application.OnTime Now + TimeValue("00:00:01"), "next_moment", , False
End Sub
Public Sub next_moment()
If Worksheets("Messwerte").Range("A1").Value = 0 Then Exit Sub
Worksheets("Messwerte").Range("A1").Value = Worksheets("Messwerte").Range("A1").Value - TimeValue("00:00:01")
start_time
End Sub
我在单元格 Worksheets("Messwerte").Range("A1").Value 中有我的计时器。我的代码结构现在如下:
For Loop
代码块 1
调用 start_time #Waiting 应该在这里应用
代码块 2
结束 For 循环
我现在的问题是计时器从 start_time 开始,但代码块 2 也开始了。我想要我的计时器,当我的计时器显示“00:00:00”时,代码块 2 应该启动。
在论坛上,我刚刚找到了解决方案,要么设置计时器,要么等到代码继续执行,但不能像我想要的那样工作。有人对此有解决方案吗?
谢谢
解决方案
我找到了一个不干净的解决方案,但它确实有效。希望它可以帮助你。
我创建了一个函数,它是一个布尔值,当计时器为 0 时变为 false。
Public Function Check_Time() As Boolean
If Sheets("Timer_Tabular").Range("Timer_Position").Value = 0 Then
Check_Time = False
Else
Check_Time = True
End If
End Function
该代码具有以下结构:
#Code before the waiting
Dim Waiting as Boolean
Waiting = True
'Wait until timer is zero
Do While Waiting
If Check_Time() = True Then
'Enables working on excel while doing nothing.
DoEvents
ElseIf Check_Time() = False Then
Waiting = False
Exit Do
End If
Loop
#Code Block, which is executed after waiting time.
因此,此时宏在 while 循环内被捕获,当计时器为 0 时,while 循环中断。DoEvents “解冻” excel 屏幕。
最终结果是:宏代码停止运行,但定时器继续运行。如果计时器为 0,则代码将继续。
推荐阅读
- android - 在 React Native 中拖动屏幕后如何画线?
- python - Django Admin 看起来很奇怪
- sql - 按天求和和分组输出 SQL
- c - 在 c 中模拟损坏的 sqlite3 服务器
- python-3.x - 多处理以在 Python 中返回大型数据集
- oracle - Oracle 数据库 11g 配置助手失败
- google-cloud-platform - 有没有办法让远程 GCloud SDK 临时访问 Storage 对象?
- excel - 如何在一年内创造 excel 的指数增长
- nginx - Certbot 或 Let's Encrypt 将多余的“.com”添加到域
- android - Android Totalcmd 错误删除!删除到垃圾箱 如何恢复已删除的文件(totalcmd)?