从Excel中的Interop(C#)应用程序运行的Excelmacros将在其完成执行之前返回

我的macros子(“第一个子”)通过调用Application.OnTime的另一个子('second-sub')结束,等待时间为5秒。 我的C#应用​​程序在“第一个子”执行完成后取回控制权。 它不等待“第二小组”完成。 有没有办法,我的C#应用​​程序可以等到两个macros完成其运行?

C#:

xlApp.Run("first-sub"); 

macros:

Sub first-sub 'Some code lines' Application.OnTime(Now + "00:00:05"), "second-sub" End Sub

Sub second-sub 'Some code lines' End Sub

我尝试使用Thread.Sleep,它没有工作。 此外,我试图创build一个单独的macros,运行调用first-sub,并等待5秒钟。 那也行不通。

我正在使用一个加载项(bloomberg插件),只有在“first-sub”结束后才计算结果。 此加载项不会计算子结果中的结果。 所以,一旦来自sub的控制出来,约5秒钟我的结果被填充。 然后,我需要“第二个子”来执行。 这是原因,我不得不使用Application.OnTime而不是Application.Wait。

所以,下面的代码不起作用

 xlApp.Run("first-sub"); xlApp.OnTime((DateTime.Now + TimeSpan.FromSeconds(5)).ToString(), "second-sub"); 

它确实运行了第二次,但是彭博的结果没有被填充。

这是许多可能的解决scheme之一:

 Sub first-sub 'Some code lines' Application.Wait "00:00:05" second-sub End Sub 

这样,您等待5秒钟,然后同步执行第二个子操作,并在第二个子操作执行之后第一个子操作结束。

另一个解决scheme是执行两个单独的分离:

 xlApp.Run("first-sub"); Application.Wait "00:00:05" xlApp.Run("second-sub");