范围:
我和我的团队正在使用VBA为我们的客户开发Excel报告。此.xlms文件中有函数和宏,我不想让客户使用。
我们已成功使用此代码示例删除工作簿中的所有宏:
private void DeleteMacros (string reportPath)
{
// WorkBookManager is our own Wrapper for the Excel Workbook class
WorkbookManager wb = new WorkbookManager (reportPath);
wb.OpenWorkbook (false);
//Lock workbook
wb.RunMacro("ThisWorkbook.LockWorkbook");
//Deleting the Macros from the workbook
VBProject project = wb.GetInstance().VBProject;
for (int i = project.VBComponents.Count; i >= 1; i--)
{
VBComponent component = project.VBComponents.Item(i);
try
{
project.VBComponents.Remove(component);
}
catch (ArgumentException)
{
continue;
}
}
for (int i = project.VBComponents.Count; i >= 1; i--)
{
VBComponent component = project.VBComponents.Item(i);
component.CodeModule.DeleteLines(1, component.CodeModule.CountOfLines);
}
wb.CloseAndSave();
wb.CleanUp();
}
问题:
我们仍然需要这个工作簿中的一些宏,比如用于从一个工作表导航到另一个工作表的宏,我们绑定到按钮(以避免在报告的底部显示工作表标签)。
问题:
有没有办法可以将那些不重要(/敏感)的宏封装在单个工作簿的单个文件中,并以某种方式删除所有其他工作簿及其宏?
如果没有,这是正确的方法吗?
答案 0 :(得分:2)
在删除之前,您是否尝试检查每个组件的属性(例如Name
)?只是不要删除你想要保留的那些。