从Interop (c#)应用程序在Excel中运行的Excel宏在完成执行之前返回

本文关键字:Excel 执行 返回 Interop 应用程序 运行 | 更新日期: 2023-09-27 18:18:40

我的宏子('first-sub')通过从Application调用另一个子('second-sub')结束。OnTime,等待时间为5秒。然而,我的c#应用程序在"first-sub"执行完成后重新获得控制权。它不会等待"第二潜艇"完成。有没有一种方法,我的c#应用程序可以等待,直到两个宏完成他们的运行?

c#:

xlApp.Run("first-sub");

宏:

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

Sub second-sub 'Some code lines' End Sub

我尝试使用线程。睡觉,不管用。此外,我尝试创建一个单独的宏,运行调用first-sub并等待5秒。

我正在使用一个加载项(彭博加载项),仅在"第一子"结束后计算结果。这个插件不会在潜艇中间计算结果。所以,一旦潜艇的控制出来,在大约5秒内,我的结果就会被填充。然后,我需要执行'second-sub'。这就是为什么,我必须使用Application。打开时间而不是Application.Wait.

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

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

它确实运行了第二个子标题,但bloomberg的结果没有填充。

从Interop (c#)应用程序在Excel中运行的Excel宏在完成执行之前返回

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

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

这样,您等待5秒,然后同步执行second-sub,并且first-sub在second-sub执行后结束。

另一个解决方案是分别执行两个sub:

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