Vba 工作簿加载完成后是否运行子例程?
范围 我正在通过C#自动生成一些Excel报告。问题是,当谈到“功能”时,我的支持库并没有涵盖所有内容 解决方案 因为我知道VBA支持我在Excel文件上需要做的所有事情,所以我决定使用它来完成我在C#中做不到的所有事情。下面是我当前生成报告的流程 1-设置一个“模板”excel文件(包含我需要的所有VBA代码,配置到Vba 工作簿加载完成后是否运行子例程?,vba,excel,Vba,Excel,范围 我正在通过C#自动生成一些Excel报告。问题是,当谈到“功能”时,我的支持库并没有涵盖所有内容 解决方案 因为我知道VBA支持我在Excel文件上需要做的所有事情,所以我决定使用它来完成我在C#中做不到的所有事情。下面是我当前生成报告的流程 1-设置一个“模板”excel文件(包含我需要的所有VBA代码,配置到工作簿_Open事件中,以便在人员打开excel文档时立即运行) 2-运行我的C#代码打开模板,用数据填充模板,生成数据透视表、图表等等 3-使用其他名称保存,以避免覆盖模板文件
工作簿_Open
事件中,以便在人员打开excel文档时立即运行)
2-运行我的C#代码打开模板,用数据填充模板,生成数据透视表、图表等等
3-使用其他名称保存,以避免覆盖模板文件
通过这样做,我最终得到一个报告,一旦有人打开它,它就可以“触发”我的宏。宏将执行诸如创建数据透视图、自动选择数据透视过滤器等操作。不要太花哨
问题:
手动打开Excel文件时,宏不起作用,导致以下错误:
在这行代码上
但是,当我等待文档停止加载,然后手动执行宏时,它会按预期工作
我认为原因可能与
Workbook\u Open
事件触发后未“准备好”读取的数据有关。尝试Workbook\u Activate
事件,该事件发生在Workbook\u Open
之后,可以引用透视表等
否则,如果需要造成延迟,您可以使用OnTime
方法:
Application.OnTime Now + TimeValue("00:00:02"), "my_Procedure"
将其放在Open事件中,它将在2秒延迟后运行名为my_procedure的过程。我从未遇到过这样的情况,但在使用HTML对象时遇到过非常类似的情况。不确定这是否有效,但值得一试
Do Until Application.Ready = True
DoEvents: Loop
在执行的这一点上,
ActiveSheet
是否包含指定的透视表?我将尝试一下。我尝试了这个应用程序。等等,但失败了。也许,实时会起作用。我很快就会回来反馈“我的程序”可以是Sub吗?是的,必须是。把它放在一个标准模块中。我发现工作簿vba文件中的子模块有一个错误。一旦它在一个单独的模块上工作,它就会工作。我现在就去试试。太棒了,那是暗中刺伤。我以前使用过ie.Ready\u状态,但从未使用过应用程序。准备好了吗