工作簿完成加载时运行子例程?
范围
我正在通过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不起作用,引发此错误:
在这行代码
但是,当我等待文档停止加载,然后手动执行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的过程。