我可以成功地将一段VBA代码注入到生成的excel工作簿中,但我想要做的是使用Workbook_Open()事件,以便在文件打开时执行VBA代码.我将sub添加到我的xlsm模板文件中的"ThisWorkbook"对象.然后我使用openxml生产力工具来反映代码并获取编码的VBA数据.
当生成文件并查看VBA时,我看到"ThisWorkbook"和"ThisWorkbook1"对象.我的VBA在"ThisWorkbook"对象中,但代码永远不会在打开时执行.如果我将我的VBA代码移动到"ThisWorkbook1"并重新打开该文件,它可以正常工作.为什么要创建一个额外的"ThisWorkbook"?是否无法使用Workbook_Open()子系统注入excel电子表格?这是我正在使用的C#代码的片段:
private string partData = "..."; //base 64 encoded data from reflection code
//open workbook, myWorkbook
VbaProjectPart newPart = myWorkbook.WorkbookPart.AddNewPart<VbaProjectPart>("rId1");
System.IO.Stream data = GetBinaryDataStream(partData);
newPart.FeedData(data);
data.Close();
//save and close workbook
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?