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

时间:2014-05-30 22:32:12

标签: excel vba excel-vba

范围

我正在通过C#自动生成一些Excel报告。问题在于,当涉及到"功能"时,我的支持库EPPlus并未涵盖所有内容。

解决方案

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

1 - 设置"模板" excel文件(包含我需要的所有VBA代码,配置到Workbook_Open事件中,以便在人员打开excel文档时它们立即运行)

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

3 - 使用其他名称保存,以避免覆盖模板文件

通过这样做,我最终得到一份准备好的报告"触发"有人打开它我的宏。宏将做一些事情,如创建枢轴图,自动选择枢轴的过滤器等。没什么太花哨的。

问题:

当我手动打开Excel文件时,宏不起作用,引发了这个错误:

Funky Excel Error

在这行代码上

Not a fancy line of code

但是,当我等待文档停止加载时,然后手动执行宏,它按预期工作。

我认为原因可能与未准备好的数据有关"在Workbook_Open事件触发后阅读。

2 个答案:

答案 0 :(得分:3)

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

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

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

将此信息放入Open事件中,并在延迟2秒后运行名为my_Procedure的过程。

答案 1 :(得分:0)

我从来没有遇到过这种情况,但是在使用HTML对象时我遇到的情况非常相似。不确定这是否有效,但值得一试

Do Until Application.Ready = True
DoEvents: Loop