我可以成功地将一块VBA代码注入到生成的Excel工作簿中,但我想要做的是使用Workbook_Open()事件,以便在打开文件时执行VBA代码。我将该sub添加到我的xlsm模板文件中的“ThisWorkbook”对象中。然后,我使用openxml生产力工具来反映代码并获取编码的VBA数据。OpenXML SDK将VBA注入到excel工作簿
生成文件并查看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
任何人有想法吗?
在VBA编辑器中,当您右键单击ThisWorkbook和ThisWorkbook1时,是否将** Remove ThisWorkbook ... **选项变为灰色? – 2012-03-21 14:03:00