关于VBA定期调用的奇怪问题

dokin1975 2017-09-19 10:48:46
我写了一个函数A需要在每天的特定时间段内每分钟调用一次,每次调用执行大约1-2秒。我通过Appliation.OnTime来触发这个定期调用,具体如下:
1)程序刚开始时调用Appliation.OnTime第一次触发函数A
2)在函数A的初始写了一个函数setNextExecTime,在这个函数内根据时间的不同调用Appliation.OnTime来再次触发函数A,在大部分情况下是一分钟之后
3)setNextExecTime结束后函数A继续执行相关业务逻辑

这个程序可以正常运行一段时间,但在半小时至一小时(不确定)后会出现各种奇怪问题,比如下标越界,溢出,零做除数,等等。我猜是由于函数A被反复调用引起的,但不清楚具体问题是什么。函数A被封装在一个模块内,该模块有若干个私有全局变量被函数A调用,不知道这个是否有影响。

请问哪位高手碰到过类似的问题?
...全文
999 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dokin1975 2017-10-11
  • 打赏
  • 举报
回复
发现原因了,是由于一个变量即未定义,有未初始化就直接使用了。感谢两位的帮助,这就结帖。
赵4老师 2017-09-19
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VBA IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
dokin1975 2017-09-19
  • 打赏
  • 举报
回复
确实有do events,但如果不用这个的话怎么实现相关逻辑呢?
笨狗先飞 2017-09-19
  • 打赏
  • 举报
回复
查查是不是函数里有doevents,有的话都去掉
笨狗先飞 2017-09-19
  • 打赏
  • 举报
回复
如果是利用doevents做延时的话,改用sleep
笨狗先飞 2017-09-19
  • 打赏
  • 举报
回复
引用 2 楼 dokin1975 的回复:
确实有do events,但如果不用这个的话怎么实现相关逻辑呢?
时间短的话忍一忍,时间长的话拆成大循环,用Timer来实现循环

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧