范围
我正在通过C#自动生成一些Excel报告。问题在于,当涉及到"功能"时,我的支持库EPPlus并未涵盖所有内容。
解决方案
因为我知道VBA支持我在Excel文件上需要做的所有事情,所以我决定使用它来完成我在C#中所能做的一切。所以这是我目前用于生成报告的流程
1 - 设置"模板" excel文件(包含我需要的所有VBA代码,配置到Workbook_Open
事件中,以便在人员打开excel文档时它们立即运行)
2 - 运行我的C#代码打开模板,用数据填充,生成数据透视表,图表等等
3 - 使用其他名称保存,以避免覆盖模板文件
通过这样做,我最终得到一份准备好的报告"触发"有人打开它我的宏。宏将做一些事情,如创建枢轴图,自动选择枢轴的过滤器等。没什么太花哨的。
问题:
当我手动打开Excel文件时,宏不起作用,引发了这个错误:
在这行代码上
但是,当我等待文档停止加载时,然后手动执行宏,它按预期工作。
我认为原因可能与未准备好的数据有关"在Workbook_Open
事件触发后阅读。
答案 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