工作簿完成加载时运行子例程?

范围

我正在通过C#自动生成一些Excel报告。 问题是,当涉及到“function”,我的支持库EPPlus并没有涵盖所有。

因为我知道VBA支持所有我需要在Excel文件上做的事情,所以我决定使用它来完成我在C#中不能做的所有事情。 所以这里是我目前生成报告的stream程

1 – build立一个“模板”Excel文件(包含我需要的所有VBA代码,configuration到Workbook_Open事件中,以便在人员打开Excel文档后立即运行)

2 – 运行我的C#代码打开模板,填充数据,生成数据透视表,图表等等

3 – 以不同的名称保存,以避免覆盖模板文件

通过这样做,我最终有一个报告,准备好“触发”我的macros,只要有人打开它。 macros将做诸如创build枢轴图,自动select枢轴的滤波器等等。 没有太花哨。

问题:

当我手动打开Excel文件,macros不起作用,引发此错误:

时髦的Excel错误

在这行代码

不是一个奇特的代码行

但是,当我等待文档停止加载,然后手动执行macros,它就像预期的那样工作。

我认为,原因可能与数据没有被“准备好”读取一次Workbook_Open事件触发器相关。

我从来没有遇到过这样的事情,但是我在使用HTML对象时遇到了非常类似的情况。 不知道这是否会奏效,但值得一试

 Do Until Application.Ready = True DoEvents: Loop 

尝试在Workbook_Activate之后发生的Workbook_Activate事件,并且可以引用数据透视表等。

否则,如果有必要导致延迟,可以使用OnTime方法:

 Application.OnTime Now + TimeValue("00:00:02"), "my_Procedure" 

把它放在Open事件中,它会在延迟2秒后运行名为my_Procedure的过程。