如何从处于状态栏更新的打开工作簿中提取处理%?

所以我有几个大的macros可以打开/closures大型工作簿,不幸的是这些工作簿需要一些时间来打开/加载/计算。 当我手动打开它们时,我可以在初始屏幕上看到开放百分比:

在这里输入图像说明

并在这里的文件的状态栏上的计算%:

处理图片

我想知道的是如何获得这些百分比,并将其传递到我的主要工作簿的状态栏,以达到以下效果:

Application.DisplayStatusBar = True Application.StatusBar = "Opening production file... " & Workbooks("Book1").LoadingPercentage & " of the way complete..." 

我是通过状态栏更新我的用户的粉丝,所以当状态栏只是说Opening production file...并挂起20秒,他们可能会越来越担心程序冻结。 我可以有一个每秒递增的计数器,但是这个计数器会不一致,不一定会certificate程序没有被冻结/崩溃。

有没有办法可以从开放的工作簿中抓取这个数字? 还是有什么聪明的解决方法? 我浏览了Workbooks("Book1").的属性Workbooks("Book1"). 并没有看到我可以使用的任何东西。

你不能。

该指令同步运行:

 Set wb = Workbooks.Open(path) 

之后的指令只会文件加载完成并且设置了wb对象引用之后才运行。

据我所知,没有办法在Excel中asynchronous打开工作簿。 如果有的话,API可能会暴露事件,如OnOpenProgress或类似的,你可以这样处理,比如说:

 Private WithEvents app As Excel.Application '... Private Sub app_OnOpenProgress(ByVal path As String, ByVal percentComplete As Double, ByRef Cancel As Boolean) Application.StatusBar = "Opening " & path & "... (" & Format(percentComplete, "0.0%") & ")" End Sub 

但这不是目前可能的AFAIK。

我可以看到完成的唯一方法是通过实现您自己的Workbooks.Open方法返回一个Excel.Workbook对象。 毋庸置疑,成本/收益比是天文数字(不利于收益)。

最好的解决办法是吸收它,并尽一切可能最小化工作簿文件的大小,主要是通过将数据存储在数据库中,而不是在Excel工作簿中。