VBA - 运行SQL查询时更新进度条

时间:2015-04-26 12:18:18

标签: excel vba excel-vba adodb

我有一个进度条,根据以下行进行更新:

Call ProgressBar(X)

其中X表示条形显示为“完成”的百分比。

我已经大致计算了整个代码中的各种时间间隔,并将这些行放在了几个地方。对于大多数代码来说,它运行得非常顺利,但只有一半的条形码,问题是强制跳跃从10%到60%。

我正在使用ADODB连接在代码中运行SQL查询(我无法将其从代码中删除,因为我通过它传递变量)。从10到60的跳转是我执行查询的行的任一侧

 Set rs = conn.Execute(QryND)

其中rs定义为ADODB.Recordset,conn定义为ADODB.Connection。

我认为理想情况下我会想知道是否可以说:

       Call ProgressBar(10)
        'code to the effect of: "in x seconds, execute the next line but in   
    'the meantime continue with the code

            Call ProgressBar(20)
        'code to the effect of: "in 2x seconds, execute the line but in the 
'meantime continue with the code
            Call ProgressBar(30)
            Set rs = conn.Execute(QryND)

或者那种效果。

或者一种在后台运行查询并将代码延续到某一点的方法。例如

     Call ProgressBar(10)
'instruct to run in backrgound:
    Set rs = conn.Execute(QryND) 
 Call ProgressBar(10)
'wait x seconds
 Call ProgressBar(20)
'wait x seconds
.
.
.

'Stop running query in background (in case it hasn't finished)

这些声音中的任何一个都可能吗?

1 个答案:

答案 0 :(得分:0)

建议不要运行后台查询,因为它们会将代码运行到错误中。您实际可以做的是将StatusBar单独保留为f *并使用while循环(或定期)进行检查,即是获取连接,运行还是完成。
您可以做的是创建一个ActiveX对象来显示您想要告诉的内容,甚至可以显示花哨的负载条和多线反馈。
除非您调用外部脚本来执行它们,否则您无法在单线程应用程序中实际拥有异步进程。