我可以成功地将一段VBA代码注入到生成的Excel工作簿中,但我想做的是使用Workbook_Open()事件,使得VBA代码在文件打开时执行。我将子程序添加到我的xlsm模板文件的"ThisWorkbook"对象中。然后,我使用OpenXml生产力工具来反映代码并获取编码的VBA数据。
当文件生成并查看VBA时,我看到"ThisWorkbook"和"ThisWorkbook1"对象。我的VBA位于"ThisWorkbook"对象中,但代码从未在打开时执行。如果我将我的VBA代码移动到"ThisWorkbook1"中并重新打开文件,则可以正常工作。为什么会多出一个"ThisWorkbook"?不可能向Excel电子表格中注入Workbook_Open()子程序吗?这是我使用的C#代码片段:
当文件生成并查看VBA时,我看到"ThisWorkbook"和"ThisWorkbook1"对象。我的VBA位于"ThisWorkbook"对象中,但代码从未在打开时执行。如果我将我的VBA代码移动到"ThisWorkbook1"中并重新打开文件,则可以正常工作。为什么会多出一个"ThisWorkbook"?不可能向Excel电子表格中注入Workbook_Open()子程序吗?这是我使用的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
有人有想法吗?