请问如何优雅地实现暂停功能

babylook 2017-07-24 10:52:19
刚接触vb编程不久,遇到个问题,需求如下:
1. A列通过SQL SERVER存储过程返回日期信息,比如20170724,20170723,20170722,...
2. B列在等待A列返回后,以同行A列日期为参数,调用外部函数返回某些数据
比如B3 = Func(Constant_Number,$A3)
3. 执行第二个存储过程,把B列的函数返回的结果作为参数进行保存.(录入数据库)

本来的执行过程应该是:
1. 打开这个Excel,VB默认开始调用第一个存储过程,并返回日期
2. 函数拿到日期字段,开始计算并返回结果到B列,这个过程大概需要一到三秒钟
3. 将函数返回所在B列字段进行返回

问题: 第二个存储过程先于函数执行,就是说函数还在做计算的时候,该单元格显示为fetching,此时还未等函数返回,后面的存储过程就开始执行了,本来要录入数据库的应该是
Func(Constant_Number,$Ax),实际上录入的是"fetching..." 囧

尝试解决:
1. Application.Wait waitTime (失败)
2. Sleep xxxx (失败)

目前折中解决办法:添加一个按钮,把第二个存储过程执行放在按钮里,等函数执行结果返回以后点一下...
求助各位:怎么才能在不影响函数执行的前提下让VB暂停,等函数执行结束以后再继续向下运行?
...全文
418 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-07-26
  • 打赏
  • 举报
回复
把程序放在虚拟机里面运行,使用虚拟机的优雅的暂停功能即可。
舉杯邀明月 2017-07-25
  • 打赏
  • 举报
回复
引用 4 楼 babylook 的回复:
[quote=引用 1 楼 Chen8013 的回复:] 你就不能自己判断“调用的外部过程”是否执行结束吗!
请问如何判断呢? 新手一枚,求告知,多谢![/quote] 你调用的“外部过程”,它执行完成后,总有“事件通知”或“回调过程”吧! 你自己用一个模块级或全局的“状态变量”进行一下标识、判断,不就好了! “等待”可以用Do循环+Sleep(),也可以用WaitForSingleObject( )。
babylook 2017-07-25
  • 打赏
  • 举报
回复
引用 2 楼 chewinggum 的回复:
采用同步方式调用存储过程
感谢回复,我试着用ontime实现了, 请问还有其他方法吗?
babylook 2017-07-25
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
你就不能自己判断“调用的外部过程”是否执行结束吗!
请问如何判断呢? 新手一枚,求告知,多谢!
babylook 2017-07-25
  • 打赏
  • 举报
回复
自己解决了, 用以下代码
   Dim newtime As Date
newtime = Now + TimeValue("00:00:05")
'MsgBox "准备执行xxx"
Application.OnTime newtime, "xxx"

谢了各位.
脆皮大雪糕 2017-07-24
  • 打赏
  • 举报
回复
采用同步方式调用存储过程
舉杯邀明月 2017-07-24
  • 打赏
  • 举报
回复
你就不能自己判断“调用的外部过程”是否执行结束吗!

2,462

社区成员

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

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