vba基于时间的切换过程

时间:2014-07-08 18:25:14

标签: vba excel-vba delay excel

如何根据时间在流程之间切换?

++++

我有一个Excel宏向Google发送XML请求,它有3个重要的过程。

  1. 发送XML请求的过程。此过程限制为每秒10个请求。
  2. 可以退出程序的加载栏
  3. Excel应用程序本身(在程序运行时应该可编辑)
  4. 宏当前正在使用sleep函数(来自kernel32.dll)来延迟进程,而DoEvents函数则确保两个进程都运行(因此可以在后台修改应用程序)。

    实施例。过程1

    Do While True
        Call doSomething
        DoEvents 'handles processes 2 and 3
        Sleep 100
    Loop
    

    此方法会延迟整个应用程序。由于100毫秒的延迟,在后台编辑Excel工作表是滞后的,并且尝试退出程序也会延迟。

    要消除此延迟,我希望进程2和3运行,并在发送请求时将控制权切换到进程1。发送请求后,进程1可以将程序控制权交还给进程2和3.是否有人有解决方案?

    奖金:VBA似乎没有多线程/处理的能力,但如果有人能够想到一种方法来立即运行所有这些进程我很想知道它

1 个答案:

答案 0 :(得分:1)

您正在寻找的每件事都涉及到实施细节,但通过搜索可以轻松找到它们。所以我会为你的每个问题提出一个方法。

  1. 使用Application.OnTime触发宏在给定时间间隔后运行。
  2. 可以执行多个线程,但这很棘手。你也需要
    • 调用另一个Excel实例并使其运行宏,这样您的主线程就不会受到影响或
    • 将您的宏放入单独的文本文件(vb-script文件)中,并通过Shell调用它来执行它。这样您就可以继续执行现有宏,并且用户重新获得对UI的控制权,但脚本会在后台获取新数据。
    • 在单独的Excel实例中执行部分代码,然后通过DDE(较旧但相当可靠的技术)或通过构建称为RTD服务器的内容将结果输入当前的电子表格。
  3. 上述各点的大量示例均可在此网站上以及其他地方通过Google获取。